Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么select权限被拒绝?_Sql - Fatal编程技术网

Sql 为什么select权限被拒绝?

Sql 为什么select权限被拒绝?,sql,Sql,向数据库用户授予权限时遇到问题。例如,我似乎无法获得我的用户选择特权,无论我给它多少安全和会员资格。我首先给用户选择权限数据库>安全性>用户>属性>安全性 并授予它db_datareader成员资格。在这不起作用之后,我将该用户添加到所有成员身份中,并授予他在安全部分中可用的所有权限。失败后,我在security>login>properties中为用户提供了所有可用的权限,我将登录添加到所有服务器角色accept sysadmin,并为用户提供了我希望他访问的数据库中所有模式的所有权。但我还是

向数据库用户授予权限时遇到问题。例如,我似乎无法获得我的用户选择特权,无论我给它多少安全和会员资格。我首先给用户选择权限数据库>安全性>用户>属性>安全性 并授予它db_datareader成员资格。在这不起作用之后,我将该用户添加到所有成员身份中,并授予他在安全部分中可用的所有权限。失败后,我在security>login>properties中为用户提供了所有可用的权限,我将登录添加到所有服务器角色accept 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 - 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
如果您对SQLServerManagementStudio更熟悉,那么可以尝试一下。所有的动作可能都不准确,但我确实与SS 2012进行了核对

假设您的登录名是[bilbo],他们想要访问的数据库是[middle earth]

  • 服务器登录的默认数据库=[bilbo]是他们试图查询的数据库吗,[middle earth]

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

  • 服务器登录是否映射到[middle earth]数据库中名为[bilbo]的数据库用户

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

  • 确保用户[bilbo]未处于任何拒绝数据库角色(db_denydatareader、db_denydatawriter)。任何拒绝行动都会凌驾于任何拨款之上

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

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

  • 确保用户[bilbo]具有该模式的权限

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

  • 这应该给你土地的布局

    找到有问题的撤销或缺少权限并分配它


    请不要给出所有服务器角色或所有数据库角色!当用户执行诸如drop table之类的愚蠢操作时,您只是在要求头痛。

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

    -- 
    -- 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
    
    如果您对SQLServerManagementStudio更熟悉,那么可以尝试一下。所有的动作可能都不准确,但我确实与SS 2012进行了核对

    假设您的登录名是[bilbo],他们想要访问的数据库是[middle earth]

  • 服务器登录的默认数据库=[bilbo]是他们试图查询的数据库吗,[middle earth]

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

  • 服务器登录是否映射到[middle earth]数据库中名为[bilbo]的数据库用户

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

  • 确保用户[bilbo]未处于任何拒绝数据库角色(db_denydatareader、db_denydatawriter)。任何拒绝行动都会凌驾于任何拨款之上

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

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

  • 确保用户[bilbo]具有该模式的权限

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

  • 这应该给你土地的布局

    找到有问题的撤销或缺少权限并分配它


    请不要给出所有服务器角色或所有数据库角色!当用户做了一些愚蠢的事情,如删除表格时,您只是在要求头痛。

    数据库是“临床数据”,表格是dbo。患者信息模式是dbo。关于这一点,不应该再进行修改。这是您的数据库,还是您用来存储数据的其他人的数据库?如果病例数据库是“临床数据”,表是dbo,他们可能必须为用户设置权限。患者信息模式是dbo。关于这一点,不应再进行修改。这是您的数据库,还是您用来存储数据的其他人的数据库?如果是这样的话,他们可能必须为用户设置权限。哈,我是如此渴望在我的测试数据库上授予所有权限并开始运行,以至于我意外地分配了DB_denydatareader和DB_denydatawriter。谢谢,特别是考虑周到的4个SSMS步骤。哈,我非常渴望授予我的测试数据库的所有权限并启动和运行,以至于我意外地分配了DB_denydatareader和DB_denydatawriter。感谢,特别是为周到的4 SSMS步骤。