对象级安全

J.D*_*.D. 1 security sql-server role users logins

我有一个数据库,它将在不同用户的多种相关类型的应用程序之间共享。我希望能够限制每个数据库用户基本上可以完全控制他们自己的对象,而只能对他们没有创建的数据库的其他对象进行读取访问。

这是可能的,实现这一目标的最佳方法是什么?

Sol*_*zky 5

研究使用模式。每个用户都可以为他们完全控制的对象拥有(并拥有)他们自己的架构。然后,您可以授予SELECT他们对其他架构的访问权限。

执行此操作时,您需要确保满足以下两个条件:

  1. 每个架构“所有者”(即AUTHORIZATION)都是针对预期用户的
  2. 每个用户都将他们的默认架构设置为他们的架构

作为架构所有者,每个用户都将拥有CONTROL架构和其中所有对象的权限。然后可以根据需要在其他模式上授予 SELECT 权限:

CREATE SCHEMA User1 AUTHORIZATION User1 ;
GO
CREATE SCHEMA User2 AUTHORIZATION User2;
GO
CREATE SCHEMA User3 AUTHORIZATION User3;
GO
ALTER USER User1 WITH DEFAULT_SCHEMA = User1;
ALTER USER User2 WITH DEFAULT_SCHEMA = User2;
ALTER USER User3 WITH DEFAULT_SCHEMA = User3;
GO
GRANT SELECT ON SCHEMA::User2 TO User1;
GRANT SELECT ON SCHEMA::User3 TO User1;
GRANT SELECT ON SCHEMA::User1 TO User2;
GRANT SELECT ON SCHEMA::User3 TO User2;
GRANT SELECT ON SCHEMA::User1 TO User3;
GRANT SELECT ON SCHEMA::User2 TO User3;
GO
Run Code Online (Sandbox Code Playgroud)

请参见: