拒绝了对对象 'xxx' (数据库 'xxx',架构 'dbo')的 SELECT 权限。

本文介绍如何在数据库中进行权限管理操作,具体步骤包括进入数据库的安全设置,调整架构与用户属性,为公共用户组授予Delete、Execute、Insert、Select及Update等权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

答案:

数据库(xxxxxx库) →安全性→架构→dbo(属性)→权限→添加→[public]→授予

Delete、Execute、Insert、Select、Update

<think>我们正在处理一个SQL Server权限问题,用户遇到了“拒绝了对对象 'xxx' 的 SELECT 权限”的错误。根据引用资料,我们可以总结出几种解决方法: 1. 检查用户角色中的“db_denydatareader”和“db_denydatawriter”角色是否被选中。如果选中,则取消勾选(引用[1]和[2])。 2. 在用户属性中直接授予对特定表的SELECT权限(引用[1]和[2])。 3. 通过架构权限设置:在数据库的“安全性”->“架构”->“dbo”属性中,添加public角色并授予SELECT权限(引用[3]和[4])。 此外,引用[5]展示了一个具体的错误示例,但没有提供新的解决方法。 因此,我们可以按照以下步骤指导用户: ### 方法1:检查并移除拒绝权限的角色 1. 打开SQL Server Management Studio (SSMS)。 2. 连接到目标数据库服务器。 3. 展开目标数据库 -> “安全性” -> “用户”。 4. 右键单击相应用户,选择“属性”。 5. 在“成员身份”选项卡中,检查是否勾选了“db_denydatareader”(拒绝读取所有表)或“db_denydatawriter”(拒绝写入所有表)。如果勾选,取消勾选。 6. 点击“确定”保存更改。 ### 方法2:直接授予表级别的SELECT权限 1. 在用户属性窗口中,切换到“安全对象”选项卡。 2. 点击“搜索”按钮,选择“特定对象”,然后点击“确定”。 3. 在“选择对象”对话框中,点击“对象类型”按钮,选择“表”(也可以选择其他对象类型),点击“确定”。 4. 点击“浏览”按钮,选择需要授权的表,点击“确定”。 5. 在“显式权限”列表中,勾选“授予”列下的“选择”权限。 6. 点击“确定”保存更改。 ### 方法3:通过架构授予权限(适用于多个表) 1. 在数据库下,展开“安全性”->“架构”。 2. 右键单击“dbo”架构(或其他相关架构),选择“属性”。 3. 在“权限”选项卡中,点击“添加”按钮。 4. 在“选择用户或角色”对话框中,点击“浏览”,然后选择“public”(或特定用户/角色),点击“确定”。 5. 在下方权限列表中,找到“选择”权限,勾选“授予”列。 6. 点击“确定”保存更改。 注意:方法3会授予对架构下所有对象SELECT权限,请谨慎使用。 ### 注意事项 - 如果用户是通过角色获得权限,请检查相关角色的权限设置。 - 确保没有其他拒绝权限的选项覆盖了授予的权限拒绝权限优先于授予权限)。 请根据实际需求选择合适的方法。通常,方法1是最快捷的,但如果你只想授予特定表的权限,使用方法2。方法3适用于整个架构权限授予。 §§相关问题§§ 1. SQL Server中如何创建新用户并授予特定表的SELECT权限? 2. 如何检查SQL Server中某个用户的权限? 3. SQL Server中db_denydatareader和db_datareader角色有什么区别?</think>### SQL Server SELECT 权限拒绝的解决方法 当出现`拒绝了对对象 'xxx' 的 SELECT 权限`错误时,通常是由于用户权限配置不当导致。以下是已验证的解决方案: #### 方法1:检查拒绝角色(推荐优先尝试) 1. **打开SQL Server Management Studio (SSMS)** 2. 展开目标数据库 → **安全性** → **用户** 3. 右键点击报错用户 → 选择 **属性** 4. 在 **成员身份** 选项卡中: - 检查是否勾选了 **`db_denydatareader`**(拒绝所有SELECT权限) - 检查是否勾选了 **`db_denydatawriter`**(拒绝所有INSERT权限) 5. 若已勾选 → **取消勾选** → 点击确定[^1][^2] #### 方法2:直接授予表权限 1. 在用户属性窗口中: - 切换到 **安全对象** 选项卡 - 点击 **搜索** → 选择 **特定对象** → 确定 2. 点击 **对象类型** → 勾选 **"表"** → 确定 3. 点击 **浏览** → 选择需要授权的表(如`dbo.xxx`) 4. 在显式权限列表中: - 勾选 **授予-SELECT**(查询权限) - 勾选 **授予-INSERT**(插入权限) 5. 点击 **确定** 保存[^1][^2] #### 方法3:通过架构授权(批量授权) 1. 展开数据库 → **安全性** → **架构** 2. 右键点击 **dbo** → 选择 **属性** 3. 切换到 **权限** 选项卡 → 点击 **添加** 4. 选择 **public** 或特定用户 → 点击 **确定** 5. 在权限列表中: - 勾选 **SELECT** 的 **授予** 列 - 勾选 **INSERT** 的 **授予** 列 6. 点击 **确定** 生效[^3][^4] > **注意**: > - `db_denydatareader`/`db_denydatawriter`是**拒绝型角色**,优先级高于授权[^1] > - 方法1适用于全局权限修复,方法2/3适用于精细控制 > - 操作后需**重新连接数据库**使权限生效 ### 权限验证SQL语句 ```sql -- 检查用户权限 EXEC sp_helprotect NULL, '用户名' -- 检查角色成员身份 SELECT r.name AS role_name FROM sys.database_role_members rm JOIN sys.database_principals r ON rm.role_principal_id = r.principal_id WHERE rm.member_principal_id = USER_ID('用户名') ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值