将数据库的所有已定义权限授予用户

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 数据库上的用户

在 MySQL 中向新用户授予权限 [重复]

授予对 SQL 数据库的权限

SQL Server - 如何将所有数据库的读取权限授予登录名?

oracle 权限