对于SQL Sever中的数据库权限管理,我非常满意。

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

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

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

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

#1 楼

您可以使用GRANT模式权限,该权限对于该模式中现有的所有内容和将要存在的所有内容均有效。

授予模式权限

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


这样,如果您要然后拒绝对该架构中某个对象的权限,则可以执行。

拒绝对象权限

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


评论


如果架构或用户名具有特殊字符,也请使用方括号。例如.... SCHEMA :: [模式]至[公司名称/joshua.duxbury]

–约书亚·达克斯伯里(Joshua Duxbury)
18年4月18日在10:17



在Azure中不起作用,为什么? (命令有效,但是SSMS出现并说“您不是Db所有者。等等等等。您可能无法保存该表”,而且确实,您不能(将ALL全部授予数据库(显示权限'Database','',TheUserId,'Create Table'和'GRANT'的state_desc)是否还需要其他魔术?还是Azure仅可由Dbo使用?

–Traderhut游戏
18年8月26日在0:06

#2 楼

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

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

下面是一个入门的示例:

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