SQL Server安全性,只读默认为新数据库

时间:2010-08-26 08:35:30

标签: sql-server security

如何在SQL Server上设置Windows登录名,使其对服务器上的任何数据库具有只读权限,并且默认只对随后添加的数据库具有只读权限。

我更喜欢T-SQL代码。

我正在使用SQL 2000

3 个答案:

答案 0 :(得分:2)

我建议您创建一个新组,并使所有用户帐户都属于它。然后在所有数据库中为该角色授予db_datareader权限。

创建名为“EVERYONE”的新服务器角色:EXEC sp_addrole 'EVERYONE'

...然后将所有用户帐户放入其中(您可以找到T-SQL从this article执行此操作,但您必须将其挖出来 - 我的防火墙不会让我发布这个片段在这里!)。

...然后使角色成为每个数据库的db_datareader角色的成员:

EXEC sp_msforeachdb 'USE [?] EXEC sp_addrolemember [db_datareader], [EVERYONE]';

请注意,出于安全原因,您可能不希望系统数据库具有完整的db_datareader权限,例如'master',因此您可以从那些组中删除EVERYONE组。

现在你需要记住:

  1. 创建新用户登录信息时,请将其添加到“每个人”角色:EXEC sp_addrolemember [EVERYONE], [new_user_name]
  2. 创建新数据库时,将“EVERYONE”添加到“db_datareader”角色:USE [new_db_name]; EXEC sp_addrolemember [db_datareader], [EVERYONE]

答案 1 :(得分:1)

对于新数据库,您不仅可以将用户/组添加到model数据库中的只读角色中。创建新数据库时,将其用作模板。

答案 2 :(得分:1)

最简单的解决方案是将您的用户添加到模型数据库。所有新数据库都从模型中“继承”,因此如果您在那里添加用户,它将自动成为所有新数据库:

use model
exec sp_adduser @Loginame = 'MyLogin', @name_in_db = 'MyUser'
exec sp_addrolemember @rolename = 'db_datareader', @membername = 'MyUser'

请注意,这仅在您实际执行CREATE DATABASE时有效。如果通过恢复备份(或CREATE然后RESTORE)创建新数据库,则备份内容将覆盖来自模型的任何内容。

如果您的需求更复杂,请编写自己的脚本或工具来创建新数据库,然后将逻辑放在那里。如果您必须管理大量数据库,您可能还想要这样做。