SQL Server 2016 Express权限异常:用户无法建表却能执行增删改
排查SQL Server用户权限异常问题
嘿,我来帮你拆解这个看似矛盾的权限问题——用户能执行数据修改操作却无法创建表,额外的权限大概率来自你没注意到的继承路径,咱们一步步排查:
1. 检查直接授予用户的对象权限
有时候权限是直接授予用户而非通过角色继承的,你可以用下面的查询查看用户被直接赋予的所有数据库权限:
SELECT dp.permission_name, dp.state_desc, COALESCE(OBJECT_NAME(major_id), 'Database/Schema Level') AS target_object, SCHEMA_NAME(o.schema_id) AS target_schema FROM sys.database_permissions dp LEFT JOIN sys.objects o ON dp.major_id = o.object_id JOIN sys.database_principals dp2 ON dp.grantee_principal_id = dp2.principal_id WHERE dp2.name = '你的用户名';
如果结果里出现INSERT/DELETE/UPDATE权限,那就是直接授予的,这就是额外权限的来源。
2. 验证自定义数据库角色的实际权限
你提到创建了仅勾选CREATE TABLE的数据库角色,但要确认这个角色没有被意外授予其他权限,或者被添加到了更高权限的内置角色(比如db_datawriter)里。执行以下查询查看角色的权限:
SELECT dp.permission_name, dp.state_desc FROM sys.database_permissions dp JOIN sys.database_principals dp2 ON dp.grantee_principal_id = dp2.principal_id WHERE dp2.name = '你的自定义角色名'; -- 同时检查角色是否属于其他高权限角色 SELECT role.name AS parent_role FROM sys.database_role_members drm JOIN sys.database_principals role ON drm.role_principal_id = role.principal_id JOIN sys.database_principals member ON drm.member_principal_id = member.principal_id WHERE member.name = '你的自定义角色名';
如果发现角色被加入了db_datawriter,那就能解释用户能修改数据的原因了。
3. 排查架构级别的权限继承
如果用户是目标架构的所有者,那默认会拥有该架构内所有对象的CONTROL权限(包括INSERT/DELETE/UPDATE)。可以用这个查询确认用户是否是架构所有者:
SELECT s.name AS schema_name, dp.name AS owner_name FROM sys.schemas s JOIN sys.database_principals dp ON s.principal_id = dp.principal_id WHERE dp.name = '你的用户名';
如果用户是架构所有者,这就是修改权限的来源,同时要注意:仅授予架构的CREATE TABLE权限可能不够,用户还需要数据库级的CREATE TABLE权限才能创建表(或者对架构拥有ALTER权限)。
4. 检查Public数据库角色的权限
默认情况下public角色不会赋予数据修改权限,但如果有人修改了public的权限,也会导致所有用户继承这些权限。执行以下查询查看public的权限:
SELECT permission_name, state_desc FROM sys.database_permissions WHERE grantee_principal_id = (SELECT principal_id FROM sys.database_principals WHERE name = 'public');
关于无法创建表的补充说明
即使你给了架构的CREATE TABLE权限,用户还需要满足以下条件才能建表:
- 拥有数据库级的
CREATE TABLE权限,或者 - 拥有目标架构的
ALTER权限(CONTROL权限也包含ALTER)
如果缺少这些权限,用户就无法在该架构内创建表,这可能是你遇到的核心问题。
内容的提问来源于stack exchange,提问作者Darem
相关产品推荐
相关产品推荐

