拒绝了对象“ Users”、数据库“ XXX”、架构“ dbo”的 SELECT 权限

我把一个数据库从 SQLServer2012移到了 Azure。我不想使用用户 master,所以我创建了一个用户 test。这是我为 Azure 上的数据库 XXX 所做的:

create user test from login test with default_schema=[dbo]
exec sp_addrolemember 'db_owner','test'

我检查了,我感兴趣的数据库对象都在模式 dbo中。表 Users位于模式 dbo中。

我的 web 项目中的连接字符串使用 test作为登录名,它产生错误消息:

The SELECT permission was denied on the object 'Users', database 'XXX', schema 'dbo'

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

367591 次浏览

我认为问题在于用户拥有 拒绝特权。当您创建的用户没有足够的权限访问数据库中的表时,就会出现此错误。为了得到你想要的东西,一定要给用户特权。

GRANT 用户对该数据库中的表的特定权限,如 SELECT、 INSERT、 UPDATE 和 DELETE。

需要为该用户授予权限

The syntax to grant select permission on a specific table :

USE YourDB;


GRANT SELECT ON dbo.functionName TO UserName;

授予数据库中所有表的选择权限:

USE YourDB;


GRANT SELECT TO UserName;

检查数据库的空间。当空间比给数据库的空间增加时,就会出现此错误。

这就是为什么当我面对这个问题的时候,我能够解决它

  1. 启动 SQLManagementStudio。
  2. 展开服务器节点(在“对象资源管理器”中)。
  3. 展开“数据库节点”,然后展开要使用特定用户访问的特定数据库。
  4. 展开数据库的 Security 节点下的 Users 节点。
  5. 右键单击特定用户,然后单击“属性”。您将看到一个对话框。
  6. 确保用户是 db _ owner 组的成员(在使用此路径之前请阅读下面的注释)以及其他使用视图所需的更改。(我在2016年用过这个。不确定特定对话框在其他版本中是什么样子,因此不是特定的)

我用这个解决了我的问题。[重要提示: 它允许特定帐户的升级(扩展)权限,可能超过个别场景所需要的权限]。

  1. 转到 SQLManagementStudio 的 Object Explorer
  2. Expand 保安, then 登陆.
  3. 选择您正在使用的用户,然后右击并选择 属性窗口
  4. 选择一个页面转到 服务器角色
  5. 单击 系统管理员并保存。
  1. 打开 SQLManagementStudio
  2. 扩展数据库
  3. 展开“安全”文件夹
  4. 扩展“用户”
  5. 右键单击用户(试图执行查询的用户)并选择 Properties
  6. Select page Membership.
  7. 记得取消检查

    db_denydatareader

    db_denydatawriter

enter image description here

This should go without saying, but only grant the permissions to what the user needs. An easy lazy fix is to check db_owner like I have, but this is not the best security practice.

使用 SSMS,我确保用户对数据库和 ReportServer 都具有连接权限。

在被查询的特定数据库上,在属性下,我映射了它们的凭据,并启用了数据读取器和公共权限。另外,正如其他人所说的——我确保没有选择拒绝读取/拒绝写入框。

我不想在他们的报告中启用 db 所有权,因为他们只需要有选择权限。

可能是您的普莱斯克面板或其他面板订阅已过期... 请检查订阅结束。

我刚刚第一次使用我网站托管服务的 Plesk 面板下载了我托管的 SQL Server 数据库的“ Export Dump”文件。

After needing to use a different StackOverflow Question/Answer to understand how to use what I had downloaded, then in SQL Server Management studio I went into Security | Logins and pointed one of the Logins to the new local database I now had and tried to run my app. I got the error message in this Question (except my error message mentioned 'Keys' rather than 'Users').

所以,我按照凯伦 · 斯图尔特提供的答案来做,这肯定是有帮助的。我的情况的不同之处在于,我的登录没有检查所有的数据库角色,而是没有检查任何角色。

因此,出于我的目的(在我的本地工作站上开发一个应用程序) ,我只需要检查 db _ owner,然后就可以开始了。