【问题标题】:SQL Server user permission on different schema不同架构的 SQL Server 用户权限
【发布时间】:2021-05-19 22:09:48
【问题描述】:

我有一个 SQL Azure 数据库,并且在 DBO 架构下已经有数千个对象。

我想创建一个具有特定访问要求的新用户

要求如下。

  1. 用户只能看到 dbo 架构下的少数对象
  2. 用户可以进行更新/选择/更改/执行..等。任何类型的修改,包括在允许查看的对象中添加或删除列。
  3. 用户可以在 dbo 架构下添加新对象。
  4. 用户不应在 SSMS 浏览器中看到 dbo 架构下的对象(不允许他们看到)。

你能帮我按照上面的规范设置用户吗?

【问题讨论】:

  • 由于其他原因,我不能使用不同的架构。
  • 如果没有#3,这将是可能的。 ALTER 架构的权限是创建新对象所必需的,并且能够查看架构中的所有对象。
  • 嗨@arif coskun 如果您需要更多信息,请告诉我。

标签: sql-server azure-sql-database


【解决方案1】:

正如 Dan Guzman 所说,如果没有 #3,这将是可能的。因为“创建表”只是数据库级别的权限,不能在架构级别分配。
用户可以定义为模式所有者。如果用户在数据库级别具有“创建表”权限并且是架构所有者,则所有表都将在他/她拥有的架构中创建。

  1. 在 Azure SQL 中创建登录名和用户:
use master;
CREATE login user1 with password='SafePassword'

use userDb;
CREATE USER user1 FOR LOGIN user1;  

GO  
  1. 我们可以使用以下查询来生成授权 T-SQL 脚本。选择您要授予用户的表。
SELECT 'GRANT SELECT,INSERT,DELETE,UPDATE ON "' + TABLE_SCHEMA + '"."' + TABLE_NAME + '" TO "user1"' FROM information_schema.tables

【讨论】:

  • 我不希望用户可以看到所有具有 dbo 模式的对象。这是我只能授予特定对象作为您共享的代码的内容。但我希望用户可以使用 dbo 对象创建新表。您的代码无法做到这一点。
  • 我试过下面的代码。我想授予用户对 dbo 的完全访问权限并拒绝我不让他修改的对象。这可行,但即使没有选择或修改对象的权限,用户也可以看到这些对象。我希望用户看不到我拒绝 CREATE USER limited_access_user WITH PASSWORD = '***' GRANT SELECT, INSERT, DELETE, ALTER, EXECUTE ON SCHEMA::dbo TO limited_access_user 的对象; GO DENY SELECT,INSERT, UPDATE, DELETE ON [dbo].[table] TO [limited_access_user]
  • 如果用户可以使用 dbo 对象创建新表。他将是架构所有者,因此我们无法授予他创建权限。
  • 您的意思是“我们不能创建拒绝允许他查看对象吗?”
  • 说实话 - 我不明白你提供的解决方案。
猜你喜欢
  • 2011-01-13
  • 2011-09-24
  • 1970-01-01
  • 2012-03-29
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
相关资源
最近更新 更多