数据库所有者dbo访问master库Movie对象时SELECT权限被拒绝
数据库所有者'dbo'被拒访问的排查与修复
尽管'dbo'作为数据库所有者默认拥有全库最高权限,但仍出现访问拒绝的情况,可从以下几个方向排查:
1. 登录账户与数据库'dbo'用户的映射异常
SQL Server中,登录账户需正确映射到数据库内的'dbo'用户才能生效。执行以下SQL检查并修复:
-- 查看当前dbo对应的登录账户 SELECT dp.name AS 数据库用户, sp.name AS 登录账户 FROM sys.database_principals dp JOIN sys.server_principals sp ON dp.sid = sp.sid WHERE dp.name = 'dbo'; -- 若映射缺失,重新关联登录账户到数据库(替换<你的登录名>和<数据库名>) ALTER AUTHORIZATION ON DATABASE::<数据库名> TO <你的登录名>;
2. 数据库处于只读状态
若数据库被设置为只读,即便是dbo也无法执行写操作,甚至部分读操作也会受限。检查并修改状态:
-- 检查数据库只读属性 SELECT name AS 数据库名, is_read_only AS 是否只读 FROM sys.databases WHERE name = '<数据库名>'; -- 若为只读,切换为读写模式 ALTER DATABASE <数据库名> SET READ_WRITE WITH ROLLBACK IMMEDIATE;
3. 存在针对'dbo'的显式拒绝权限
误操作可能给'dbo'添加了显式拒绝权限,覆盖了默认的所有者权限。检查并清理:
-- 查询针对dbo的拒绝权限 SELECT permission_name, state_desc FROM sys.database_permissions WHERE grantee_principal_id = USER_ID('dbo') AND state_desc = 'DENY'; -- 移除拒绝权限(替换<权限名称>,比如SELECT/INSERT等) REVOKE <权限名称> TO dbo CASCADE;
4. 数据库所有者SID不匹配
数据库所有者的SID与服务器登录账户SID不一致时,会导致权限失效。执行命令重置所有者:
-- 设置数据库所有者为指定登录账户(替换<你的登录名>) EXEC sp_changedbowner '<你的登录名>';
内容的提问来源于stack exchange,提问作者T. J. Fan
相关产品推荐
相关产品推荐

