如何限制数据库用户通过视图或过程间接访问表

问题描述 投票:0回答:1

我创建了名为limited_a的登录名,然后为数据库test_db创建了名为limited_u的limited_a用户。 我有表 t1、t2、t3、t4,用户 limit_u 仅对 t1 和 t2 有选择权限 他们是一个名为 get_t3 的视图,它从表 t3 中检索数据,还有一个名为 update_t4 的过程,它更新表 t4 中的数据。据我们所知,用户 limit_u 无权访问表 t3 和表 t4,但仍然可以使用过程视图或任何其他方法(如函数)间接操作数据。我需要限制用户 limted_u。 如何实现对用户的限制。 我无法限制用户访问过程或视图,但我需要限制用户通过视图和过程访问表。

我已经尝试使用更改授权来实现这一点,但随后它撤销了其他用户的权限。 我尝试拒绝,撤销对表的权限,但用户仍然可以通过视图或过程访问表

sql t-sql view ssms procedure
1个回答
0
投票

以下是如何限制数据库用户通过 SQL Server 中的视图或过程间接访问表:

授予视图和程序权限:

  • 默认情况下,用户继承视图和过程的权限 关于其基础表权限。但是,您可以明确地 独立于表授予视图和过程的权限 他们访问。
  • 仅授予必要的权限(SELECT、INSERT、UPDATE、DELETE) 向用户显示视图或过程。这限制了用户 对基础表执行意外操作。

示例:

  1. 创建一个名为 Customers 的表,其中包含客户信息。
  2. 创建一个名为 CustomerList 的视图,该视图仅公开特定列 来自客户表。

T-SQL:

CREATE TABLE Customers (
  CustomerID int PRIMARY KEY,
  CustomerName nvarchar(50) NOT NULL,
  Email nvarchar(100),
  Phone varchar(20)
);

CREATE VIEW CustomerList AS
SELECT CustomerID, CustomerName
FROM Customers;
  1. 创建名为 SalesUser 的用户并仅授予他们 SELECT 权限 在客户列表视图上。

T-SQL:

CREATE LOGIN SalesUser WITH PASSWORD = 'StrongPassword!';
CREATE USER SalesUser FOR LOGIN SalesUser;

GRANT SELECT ON CustomerList TO SalesUser;

在此场景中,SalesUser 可以通过 CustomerList 视图访问客户名称和 ID,但他们无法直接访问 Customers 表以及电子邮件地址和电话号码等潜在敏感信息。

其他技术:

  • 模式绑定:将视图和过程绑定到特定模式 用户无权访问。这会阻止他们执行 视图或过程,即使它们具有底层的权限 桌子。
  • 行级安全性:在表上实施行级安全性 根据用户属性限制数据访问。这允许受控 即使用户拥有视图或过程的权限也可以访问。

记住:

  • 限制最细粒度的访问(视图/过程) 提供最好的安全性。
© www.soinside.com 2019 - 2024. All rights reserved.