sql - MSSQL - 授予除一个表之外的所有表的选择权限

标签 sql sql-server t-sql permissions

我有一个数据库,其中通用用户具有“public”和“db_datareader”权限,以便用户可以从所有表/ View 中进行选择。

现在我有一个特定的情况,其中该数据库中有一个表,只有特定用户有权访问。

是否有一种简单的方法可以排除该一个表,而不必授予通用用户对所有其他表/ View 的特定权限? 本问题:Similar Question谈论“DENY”规则

其次,如果我在 View 中使用此表..如果您无权访问 View 定义中的所有表, View 的选择会失败吗?

感谢您的反馈!

最佳答案

是的,DENY就是这里的方法。是的,如果在 View 中使用该表,用户将能够查询它。

下面的示例代码演示了它:

--DROP USER IF EXISTS [StackOverflow];
--DROP TABLE IF EXISTS [dbo].[Data];
--DROP TABLE IF EXISTS [dbo].[DataDeny];
--DROP VIEW IF EXISTS [dbo].[vw_Data];

CREATE USER [StackOverflow] WITHOUT LOGIN;

EXEC sp_addrolemember @rolename = 'db_datareader'
                     ,@membername = 'StackOverflow';

GO

CREATE TABLE [dbo].[Data]
(
    [column] INT
);

INSERT INTO [dbo].[Data]
VALUES (1);

GO

CREATE TABLE [dbo].[DataDeny]
(
    [column] INT
);

INSERT INTO [dbo].[DataDeny]
VALUES (2);

GO

CREATE VIEW [dbo].[vw_Data]
AS
SELECT [column]
FROM [dbo].[Data]
UNION ALL
SELECT [column]
FROM [dbo].[DataDeny];

GO

DENY SELECT ON [dbo].[DataDeny] TO [StackOverflow]

GO

EXECUTE AS USER  = 'StackOverflow';

SELECT [column] AS [read]
FROM [dbo].[Data];

SELECT [column] AS [not_Read]
FROM [dbo].[DataDeny]

SELECT [column] AS [read]
FROM [dbo].[vw_Data];

REVERT;

enter image description here

关于sql - MSSQL - 授予除一个表之外的所有表的选择权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51608294/

相关文章:

sql-server-2008 - T-SQL 查看子查询Where 子句

mysql - 获取页面 block

mysql - 2 个不同的表是否应该共享相同的点赞/投票表

sql - 为什么在 go sql 包中使用准备好的语句而不是 Query/Exec?

c# - Entity Framework 从 SQL Server View 返回损坏/交换数据

c# - 将 T-SQL 连接到 C++ 或 C#

sql - 我如何需要将 ID 和名称传递给变量并执行过程

sql - 我可以在 SQL 的聚合函数中包含非聚合列而不将其放入 GROUP BY 子句中吗?

sql-server - SQL Server MERGE + 连接其他表

c# - 如何加快在 SQL 数据库表中插入文本文件的速度?