如何在SQL Server上设置Windows登录名,使其对服务器上的任何数据库具有只读权限,并且默认只对随后添加的数据库具有只读权限。
我更喜欢T-SQL代码。
我正在使用SQL 2000
答案 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组。)
现在你需要记住:
EXEC sp_addrolemember [EVERYONE], [new_user_name]
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)创建新数据库,则备份内容将覆盖来自模型的任何内容。
如果您的需求更复杂,请编写自己的脚本或工具来创建新数据库,然后将逻辑放在那里。如果您必须管理大量数据库,您可能还想要这样做。