【问题标题】:SQL Server roles and permissionsSQL Server 角色和权限
【发布时间】:2019-03-27 08:34:22
【问题描述】:

我真的需要一些关于在服务器级别添加角色并应用一些适用于我服务器上每个数据库的权限的建议。

基本上我需要两个角色只读和读写。 读取将有权选择和查看任何对象 写入将有权选择/插入/删除和执行任何对象

我想创建一个服务器角色,然后是与该角色关联的登录名(可以是 AD 组),然后为每个数据库创建一个将从服务器角色继承所有权限的用户。

所以在每个数据库上,我都会创建属于服务器角色的每个用户,问题是要明确定义权限,在我看来不是直截了当。

我可以看到,我不能将读取或写入分配给一个角色,然后在每个数据库上使用它,相反,在服务器角色的“常规”选项卡上,我有一堆权限,不清楚该使用哪个以此目的。

也许我做错了,但我想在服务器级别有一些东西,而不是为此目的在每个数据库上定义相同的角色。我正在使用 SQL Server 2014。

【问题讨论】:

  • 您计划使用服务器级角色而不是数据库级角色是否有原因?服务器级角色并不真正适合您打算做的事情。

标签: sql-server


【解决方案1】:

简短的回答是你不能

通常,服务器级别的权限不会向下传播到数据库中的单个对象。唯一的例外是 sysadmin 角色,我强烈建议您不要将其用于此目的,因为您实际上会将整个服务器实例的控制权交给其中的每个成员。

作为一种速记,您可以使用内置的数据库角色来为自己省点麻烦。对于只读访问,db_datareader 角色的成员资格通常就足够了,除非您有存储过程返回该角色应该能够执行的数据集。还有一个类似的修改角色,db_datawriter,但是不涵盖execute权限。因此,您必须为此创建一个自定义角色:

create role [DataChanger] authorization [dbo];
go
alter role [db_datareader] add member [DataChanger];
go
alter role [db_datawriter] add member [DataChanger];
go
grant execute to [DataChanger];
go

-- Now you can add your members. Here is a reader
create user [Domain\MyUser1] from login [Domain\MyUser1];
go
alter role [db_datareader] add member [Domain\MyUser1];
go
-- Writer
create user [Domain\MyUser2] from login [Domain\MyUser2];
go
alter role [DataChanger] add member [Domain\MyUser2];
go

这些权限将自动获取新创建的对象,而无需在每次架构修改后显式添加新权限。

您必须在要以这种方式管理的每个用户数据库的上下文中执行此操作。您可能可以创建一个定期运行的 SQL 代理作业,并将这些更改引入任何尚未拥有它们的用户数据库中(例如,如果数据库已从早期备份中恢复,或从另一台服务器或新的一个已创建)。此外,由于您不能在静态代码中循环访问数据库,因此您需要将其包装成动态 SQL 并循环通过 sys.databases,或者可能通过 undocumented sp_MSforeachdb 系统存储过程。哦,别忘了从动态代码中删除所有这些 go 语句,因为它们不是 SQL 的一部分,只能被 SSMS 和 sqlcmd 识别。

附:话虽如此,我希望您不要以这种方式管理任何生产数据库。我什至不知道从哪里开始说这种方法有多不安全。

【讨论】:

  • 谢谢 Roger 的回答!所以没有直接的解决方案,我还有一个问题,当你提到生产数据库时,那么管理方式是什么?你的意思是创建SQL 作业?
  • @carlosm,我的意思是,对于生产系统而言,如此广泛的授权通常过于粗心和不必要。除非您有一个应用程序可以完全管理实例上的所有用户数据库,直接在各处更改数据而不使用存储过程或任何其他类型的服务器端代码,否则我建议您考虑更精细的方法。在大多数情况下,这通常意味着要花更多时间仔细考虑现场grants。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 2014-09-15
  • 2010-12-23
  • 2017-09-13
  • 1970-01-01
  • 2011-10-15
相关资源
最近更新 更多