2013-10-01 112 views
0

我在向数据库用户授予权限时遇到问题。例如,我似乎无法得到我的用户SELECT权限,无论我给它多少安全和会员资格。我开始给用户选择权限数据库>安全性>用户>属性>安全性 并为其提供db_datareader成员身份。在这之后无效,我将用户添加到所有成员资格中,并授予他在安全部分提供的所有权限。之后,我给了用户在安全>登录>属性中可用的所有权限,我将登录添加到所有服务器角色接受系统管理员,并为我希望他访问的数据库中的所有模式赋予用户所有权。当我添加登录到系统管理员角色,它映射到已经没有问题做选择,插入,基本上别的用户为什么选择权限被拒绝?

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

,但我依然得到低于此相同的错误。奇怪的是,当我查看数据库>属性>权限时,用户没有我在安全部分授予他的任何权限。这里是我用来授予的代码:

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

在此先感谢您提供的任何帮助。

+0

数据库是'Clinical_Data',表是dbo.Patient_Information架构是dbo – Gaven

+0

刚刚更新它。 – Gaven

+0

对不起,不应该有任何修改。 – Gaven

回答

4

我通常会创建一个数据库角色并将用户分配给角色。将模式特权分配给数据库角色。下面是一个使用虚拟数据库代码的简单例子。

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

--create test user login 
CREATE LOGIN [User1] WITH PASSWORD=N'[email protected]' 
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],并且他们想要访问的数据库是[middle earth]。

  1. 是服务器登录= [比尔博]默认的数据库,他们正试图查询数据库,[中土]?

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

  2. 在[中土]映射到名为数据库用户[比尔博]服务器登录数据库?

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

  3. 确保用户[比尔博]是不是在任何否认数据库角色(db_denydatareader,db_denydatawriter)。任何拒绝行为都会违反任何赠款。

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

    {你会在这里添加自定义数据库角色。}

  4. 确保用户[bilbo]对模式有权限。

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

这应该给你的土地布局。

找到违规撤销或缺少许可​​并分配它。

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

+0

非常感谢!它工作完美。 – Gaven

+0

哈,我很想给我的测试数据库提供所有权限并启动并运行,我不小心分配了db_denydatareader和db_denydatawriter。谢谢,尤其是对于周到的4 SSMS步骤。 – Resource