我的情况是,我们使用的应用程序有许多用于存储的数据库,并根据需要动态创建新的数据库(SQL Server 2008 R2)。
根据需要,应用程序将为自己创建一个新的存储数据库。
我的问题是我有一个用于ApplicationDatabase的sql server帐户,我希望在创建存储数据库时自动赋予它权限,但不能在存储数据库中创建的任何其他数据库。相同的sql server实例。我无法控制存储数据库的创建。
我读了In the answer to this question我可以在模型数据库中添加帐户,但是当我只希望它应用于上述数据库时,这似乎会添加所有新数据库的权限。
我能想出的最佳解决方案是SQL服务器作业或外部应用程序,它每天运行一次并查找每个数据库的存在,对它找到的每个数据库应用权限,但这似乎不太理想
答案 0 :(得分:0)
您可以实现在创建新数据库时将触发的DDL trigger。根据数据库的属性(如名称或存储定义),您可以在新数据库上运行其他脚本以设置所需的安全性。
http://msdn.microsoft.com/en-us/library/ms186406.aspx
以下是上述文章的摘录:
IF EXISTS (SELECT * FROM sys.server_triggers
WHERE name = 'ddl_trig_database')
DROP TRIGGER ddl_trig_database
ON ALL SERVER;
GO
CREATE TRIGGER ddl_trig_database
ON ALL SERVER
FOR CREATE_DATABASE
AS
PRINT 'Database Created.'
SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')
GO
DROP TRIGGER ddl_trig_database
ON ALL SERVER;
GO
此致
·彼得