我无法向数据库用户授予权限。例如,无论我给它多少安全性和成员资格,我似乎无法获得我的用户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
提前感谢您提供的任何帮助。
答案 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],他们想要访问的数据库是[中间地球]。
服务器登录的默认数据库= [bilbo]他们试图查询的数据库,[中间地球]?
[SMSS对象资源管理器路径]:服务器 - >安全 - >登录 - >右键单击+属性
服务器登录是否映射到[中间地球]数据库中名为[bilbo]的数据库用户?
[SMSS对象资源管理器路径]:数据库名称 - >安全 - >用户
确保用户[bilbo]不在任何拒绝数据库角色(db_denydatareader,db_denydatawriter)中。任何拒绝采取任何补助的行动。
[SMSS对象资源管理器路径]:数据库名称 - >安全 - >角色 - >数据库角色 - >选择+右键单击+属性
{您可以在此处添加自定义数据库角色。}
确保用户[bilbo]拥有架构的权限。
[SMSS对象资源管理器路径]:数据库名称 - >安全 - >架构 - >选择+右键单击+属性
这应该给你土地的布局。
查找违规撤销或缺少权限并分配。
请不要透露所有服务器角色或所有数据库角色!当用户做像丢弃表这样愚蠢的事情时,你只是要求头痛。