对象'Users',数据库'XXX',架构'dbo'上的SELECT权限被拒绝

Old*_*zer 62 sql-server azure-sql-database

我将数据库从SQL Server 2012移动到Azure.我不想使用用户master,所以我创建了一个用户test.这就是我为Azure上的数据库XXX所做的:

create user test from login test with default_schema=[dbo]
exec sp_addrolemember 'db_owner','test'
Run Code Online (Sandbox Code Playgroud)

我检查过,我感兴趣的数据库对象都在架构中dbo.该表Users位于架构中dbo.

我的Web项目中的连接字符串具有test登录名.它会生成错误消息:

The SELECT permission was denied on the object 'Users', database 'XXX', schema 'dbo'
Run Code Online (Sandbox Code Playgroud)

错误消息的含义是什么,以及如何让用户test访问数据库XXX?

Rah*_*thi 65

我认为问题在于用户具有拒绝权限.当您创建的用户没有足够的权限访问数据库中的表时,会出现此错误.请将权限授予用户以获得所需内容.

GRANT用户特定权限如SELECT,INSERT,更新和删除在该数据库中的表.

  • 我不得不撤销'db_denydatareader'和'db_denydatawriter'. (37认同)
  • 有时您会丢失数据库数据读取器/数据库所有者选项?http://www.windowstechinfo.com/2014/09/solved-the-select-permission-was-denied-on-the-object-home-add-database-myonttv-schema-dbo.html (3认同)
  • 我不得不取消选中'db_denydatareader'和'db_denydatawriter',我猜这就是SaeX所说的"撤销".谢谢SaeX. (3认同)

小智 23

授予select权限的语法是:

USE YourDB;

GRANT SELECT ON dbo.functionName TO UserName;
Run Code Online (Sandbox Code Playgroud)

  • 我第一次这样做,所以我不确定它是否正确,但我想授予整个数据库的选择权限,所以我做了 GRANT SELECT TO UserName 并离开了 ON 子句。有效。 (2认同)

Kol*_*yon 22

  1. 打开SQL Management Studio
  2. 扩展您的数据库
  3. 展开"安全"文件夹
  4. 展开"用户"
  5. 右键单击用户(尝试执行查询的用户)
  6. 确保取消选中

    Properties

    Membership

在此输入图像描述

这应该不言而喻,但只授予用户需要的权限.一个简单的懒惰修复是db_denydatareader像我一样检查,但这不是最好的安全措施.

  • 你是我的救星,非常感谢:) (4认同)
  • 我们中的许多人只是简单地选择所有这些,假设我们将获得所有权限。然而也有一个“否认” (3认同)
  • 在 SSMS 18 中,_users_ 可在_Logins_ 文件夹中找到,_membership_ 切换可在_User mapping_ 下找到。 (2认同)

Pra*_*B R 18

这就是我遇到问题时能够解决问题的方法

  1. 启动SQL Management Studio.
  2. 展开服务器节点(在"对象资源管理器"中).
  3. 展开"数据库"节点,然后展开您尝试使用特定用户访问的特定数据库.
  4. 展开数据库的"安全性"节点下的"用户"节点.
  5. 右键单击特定用户,然后单击"属性".您将看到一个对话框.
  6. 确保用户是db_owner组的成员(请在使用此路径之前阅读以下注释)以及使用该视图进行的其他必需更改.(我在2016年使用它.不确定特定对话框在其他版本中的外观如何,因此不具体)

  • 注意放入db_owner数据库角色的人员.并非所有用户都应添加到该角色. (6认同)
  • @Jacob在任何表中写入和读取数据都有id db_datareader和db_datawriter.db_owner还授予修改表定义的权限. (2认同)
  • 如果用户检查了db_denydatareade或db_denydatawriter,则此方法不起作用 (2认同)