使用规则为新创建的数据库设置权限

时间:2011-06-08 22:12:13

标签: sql sql-server

我的情况是,我们使用的应用程序有许多用于存储的数据库,并根据需要动态创建新的数据库(SQL Server 2008 R2)。

  • ApplicationDatabase
  • ApplicationDatabase_Storage001
  • ApplicationDatabase_Storage002
  • ApplicationDatabase_Storage003
  • 等...

根据需要,应用程序将为自己创建一个新的存储数据库。

我的问题是我有一个用于ApplicationDatabase的sql server帐户,我希望在创建存储数据库时自动赋予它权限,但不能在存储数据库中创建的任何其他数据库。相同的sql server实例。我无法控制存储数据库的创建。

我读了In the answer to this question我可以在模型数据库中添加帐户,但是当我只希望它应用于上述数据库时,这似乎会添加所有新数据库的权限。

我能想出的最佳解决方案是SQL服务器作业或外部应用程序,它每天运行一次并查找每个数据库的存在,对它找到的每个数据库应用权限,但这似乎不太理想

1 个答案:

答案 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

此致

·彼得