Azure SQL数据库新建包含用户默认拥有全架构SELECT权限问题排查
Azure SQL数据库包含用户默认拥有全架构SELECT权限的排查方向
检查用户是否被隐式添加到其他数据库角色:除Public外,db_datareader这类内置角色会赋予全库SELECT权限,执行以下SQL确认:
SELECT dp.name AS 数据库用户, dr.name AS 数据库角色 FROM sys.database_role_members drm JOIN sys.database_principals dp ON drm.member_principal_id = dp.principal_id JOIN sys.database_principals dr ON drm.role_principal_id = dr.principal_id WHERE dp.name = '你的目标用户名';检查架构的所有者设置:如果用户是某架构的所有者,会自动获得该架构的所有权限,执行SQL查看各架构的所有者:
SELECT name AS 架构名, (SELECT name FROM sys.database_principals WHERE principal_id = s.principal_id) AS 所有者名称 FROM sys.schemas s;检查数据库级的直接权限授予:可能存在直接给用户授予数据库范围的SELECT权限,而非限定到特定架构,执行以下SQL排查:
SELECT dp.name AS 被授权用户, perm.permission_name, perm.class_desc FROM sys.database_permissions perm JOIN sys.database_principals dp ON perm.grantee_principal_id = dp.principal_id WHERE dp.name = '你的目标用户名' AND perm.permission_name = 'SELECT';检查关联的服务器登录权限:虽然是包含用户,但如果该用户关联了服务器登录,且登录拥有serveradmin、sysadmin等高权限,会传递到数据库层面,执行SQL确认关联关系:
SELECT sp.name AS 服务器登录名, dp.name AS 数据库用户 FROM sys.server_principals sp JOIN sys.database_principals dp ON sp.sid = dp.sid WHERE dp.name = '你的目标用户名';
内容的提问来源于stack exchange,提问作者erolapple
相关产品推荐
相关产品推荐

