为什么拒绝选择权限?

时间:2013-10-01 20:43:44

标签: sql

我无法向数据库用户授予权限。例如,无论我给它多少安全性和成员资格,我似乎无法获得我的用户SELECT权限。我首先给用户选择权限数据库> security> Users> Properties> securables 并给它db_datareader成员资格。在此操作无效后,我将用户添加到所有成员资格中,并授予他在securables部分中可用的所有权限。在失败之后,我向用户提供了安全性> login>属性中可用的所有权限,我向所有服务器角色添加了登录,接受了sysadmin,并授予用户对我希望他访问的数据库中所有模式的所有权。我仍然在下面得到同样的错误:

 The SELECT permission was denied on object 'Patient_Information', database 'Clinical_Data', schema 'dbo'

当我将登录添加到角色sysadmin时,它所映射到的用户在选择,插入和基本上任何其他内容时都没有问题。奇怪的是,当我查看数据库>属性>权限时,用户没有我在securables部分授予他的任何权限。这是我用来授予的代码:

 USE Clinical_Data; GRANT Select on schema::DBO to lab31

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:4)

我通常会创建一个数据库角色并将用户分配给该角色。将架构权限分配给数据库角色。下面是一个使用虚拟数据库代码的快速示例。

-- 
-- 1 - GRANTING CORRECT USER ACCESS BY SCHEMA
-- 

--create test user login
CREATE LOGIN [User1] WITH PASSWORD=N'p@55w0rd'
GO

-- Make sure we are in autos
USE [AUTOS]
GO

--create user in test database
CREATE USER [User1] FOR LOGIN [User1] WITH DEFAULT_SCHEMA=[ACTIVE]
GO

--create role
CREATE ROLE [Auto_User] AUTHORIZATION [dbo]
GO

--apply permissions to schemas
GRANT ALTER ON SCHEMA::[ACTIVE] TO [Auto_User]
GO

GRANT CONTROL ON SCHEMA::[ACTIVE] TO [Auto_User]
GO

GRANT SELECT ON SCHEMA::[ACTIVE] TO [Auto_User]
GO

--ensure role membership is correct
EXEC sp_addrolemember N'Auto_User', N'User1'
GO

如果您对SQL Server Management Studio更加满意,可以试试这里。所有行动可能都不准确,但我确实用SS 2012检查了它们。

让我们说你的登录名是[bilbo],他们想要访问的数据库是[中间地球]。

  1. 服务器登录的默认数据库= [bilbo]他们试图查询的数据库,[中间地球]?

    [SMSS对象资源管理器路径]:服务器 - >安全 - >登录 - >右键单击+属性

  2. 服务器登录是否映射到[中间地球]数据库中名为[bilbo]的数据库用户?

    [SMSS对象资源管理器路径]:数据库名称 - >安全 - >用户

  3. 确保用户[bilbo]不在任何拒绝数据库角色(db_denydatareader,db_denydatawriter)中。任何拒绝采取任何补助的行动。

    [SMSS对象资源管理器路径]:数据库名称 - >安全 - >角色 - >数据库角色 - >选择+右键单击+属性

    {您可以在此处添加自定义数据库角色。}

  4. 确保用户[bilbo]拥有架构的权限。

    [SMSS对象资源管理器路径]:数据库名称 - >安全 - >架构 - >选择+右键单击+属性

  5. 这应该给你土地的布局。

    查找违规撤销或缺少权限并分配。

    请不要透露所有服务器角色或所有数据库角色!当用户做像丢弃表这样愚蠢的事情时,你只是要求头痛。