将数据库的所有已定义权限授予用户
Posted
技术标签:
【中文标题】将数据库的所有已定义权限授予用户【英文标题】:Grant All Defined Permisions for Database to User 【发布时间】:2019-04-17 14:51:04 【问题描述】:这是逐字逐句的问题: 将数据库 cis605 的所有已定义权限授予 cis605_usr
我读到“GRANT ALL”语法已被弃用,仅授予适用于对象 (https://docs.microsoft.com/en-us/sql/t-sql/statements/grant-object-permissions-transact-sql?view=sql-server-2017) 的 ANSI-92 权限。
如果我运行这个查询,我可以看到已经分配给用户的权限,但我需要查看数据库权限:
SELECT DISTINCT pr.principal_id, pr.name, pr.type_desc,
pr.authentication_type_desc, pe.state_desc,
pe.permission_name
FROM sys.database_principals pr
JOIN sys.database_permissions pe
ON pe.grantee_principal_id = pr.principal_id
WHERE pr.name = 'cis605_usr';
此查询返回权限,但我看不到权限名称,如 INSERT、UPDATE、DELETE 等...或数据库名称/ID:
SELECT * FROM sys.database_permission;
如何找到所有数据库权限并将所有数据库权限授予用户?
【问题讨论】:
permission_name
列将显示授予的权限值。如果您没有看到“INSERT”之类的值,则表示该用户没有被授予权限(假设您有查看其他用户权限的权限。
【参考方案1】:
INSERT、UPDATE、DELETE 等是对象级权限,而不是数据库权限。您可以将用户分配给数据库角色(即 db_owner、db_datawrite 等)以在更高级别授予这些权限。如果您希望他们能够执行数据库中的所有操作,请为他们分配 db_owner 权限。
【讨论】:
这解释了为什么我在 database_permission 系统表中没有看到这些权限。我使用此查询将 db_owner 角色添加到 cis605_usr: ALTER ROLE db_owner ADD MEMBER cis605_usr;我相信这就是他要找的东西,谢谢。以上是关于将数据库的所有已定义权限授予用户的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL:将所有权限授予 PostgreSQL 数据库上的用户