SQL Server-授予对整个架构与对象的权限?


25

对于SQL Sever中的数据库权限管理,我感到非常高兴。

让我们保持一个简单的例子。

假设帐户“ admin”是架构A,B和C的所有者。

您想要在架构A,B和C下创建的任何对象(表/视图)具有完全权限(更新/删除/插入/选择/更改)的另一个帐户“ minion”。

这可能吗?还是您每次在这些模式下添加表/视图时都必须执行Grant语句?(对我来说似乎有点愚蠢)。

Answers:


36

您可以GRANT对所有存在于该架构中的一切以及将存在于该架构中的一切都有效的架构许可权。

授予架构权限

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: <schema> TO <user>;

除此之外,如果您想要然后拒绝对该模式中的某个对象的权限,则可以执行。

拒绝对象权限

DENY INSERT ON OBJECT::<schema>.<object> TO <user>;

1
如果架构或用户名具有特殊字符,也请使用方括号。例如.... SCHEMA :: [schema] TO [company-name/joshua.duxbury]
Joshua Duxbury '18

在Azure中不起作用,为什么?(命令有效,但SSMS出现并说“您不是Db所有者。等等等等。您可能无法保存该表”,而且肯定不能(将ALL全部授予数据库) (显示权限“数据库”,“ <数据库名称>”,TheUserId,“创建表”和“ GRANT”的state_desc)是否还需要其他魔术?还是Azure仅可用于Dbo?
Traderhut Games

13

为了进一步简化,您可以使用角色来完成所需的工作。

为角色分配权限后,就可以将用户添加到角色中。这样,您不必管理单个用户的权限。用户继承授予角色的权限。

下面是一个让您入门的示例:

 -- Create the database role
CREATE ROLE TableSelector AUTHORIZATION [dbo]
GO
 ---- Grant access rights to a specific schema in the database
GRANT 
      SELECT, INSERT, UPDATE, DELETE, ALTER 

ON SCHEMA::dbo
      TO TableSelector 
GO

-- Add an existing user to the new role created 
EXEC sp_addrolemember 'TableSelector', 'MyDBUser'
GO

-- Revoke access rights on a schema from a role 
DENY ALTER  -- you can customize here ...
ON SCHEMA::dbo
      TO TableSelector 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.