【问题标题】:Permission required to view list of tables in Management Studio在 Management Studio 中查看表列表所需的权限
【发布时间】:2009-11-10 16:15:34
【问题描述】:

我在 SO 中搜索了一个已经存在但找不到的相关问题。

我正在为我们服务器场中的一些数据库设置只读数据库角色。以下是一个表的权限示例:

GRANT SELECT ON [dbo].[Table] TO [ReadOnly]
GRANT VIEW DEFINITION ON [dbo].[Table] TO [ReadOnly]
DENY ALTER ON [dbo].[Table] TO [ReadOnly]
DENY CONTROL ON [dbo].[Table] TO [ReadOnly]
DENY DELETE ON [dbo].[Table] TO [ReadOnly]
DENY INSERT ON [dbo].[Table] TO [ReadOnly]
DENY REFERENCES ON [dbo].[Table] TO [ReadOnly]
DENY TAKE OWNERSHIP ON [dbo].[Table] TO [ReadOnly]
DENY UPDATE ON [dbo].[Table] TO [ReadOnly]

这适用于 SELECT 权限...我能够选择数据,这正是我想要的。

但是,在 Management Studio 中,我看不到指定数据库的“表”选项卡中的表列表。我对这个用户的目标是为一些不熟悉 SQL 的用户提供一个登录名,他们可以用来提取数据并开始试验 SQL。这些用户对 SAS(一种统计处理语言)有丰富的经验,因此他们有一些使用代码的经验,但特别是在 SQL 方面没有那么多经验。

其中哪些权限将显示 Management Studio 中的表列表?

【问题讨论】:

  • 这特别令人不安......我的印象是查看定义是查看数据库元数据所需的全部内容。
  • 这是您唯一需要的权限 - 您明确拒绝同一用户的其他可继承权限,这会覆盖 GRANT(拒绝始终优先于 GRANT)。更改为 REVOKE,您将在 SSMS 中看到对象(请参阅下面的答案)

标签: sql sql-server


【解决方案1】:

您只需要授予任何权限和视图定义,但是您也明确地DENY从同一用户那里继承了权限(DENY 总是覆盖GRANT)。如果您根本没有 GRANT 权限,他们将不会拥有它(或者,您可以 REVOKE 而不是 DENY,它不会显式覆盖 GRANT)。如果您在上述脚本中将DENY 更改为REVOKE,您的用户将能够列出/查看SSMS 中的对象。

【讨论】:

    【解决方案2】:

    这不是问题的答案 - 但它会做你需要做的事情:

    使用 DB_DataReader 角色 - 对于您希望只读的用户。 那么如果您需要进一步向他隐藏一些表格 - 只需处理它们即可。

    【讨论】:

    • 非常好...会不会是所有名为“INFORMATION_SCHEMA.***”的表?
    • 我认为您可能需要为这项工作授予更多对象的视图定义,我正在尝试找出它们是什么......
    • 我已经编辑了答案 - db_datareader 角色是创建只读用户的好选择。可以看到架构,但不能访问表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    相关资源
    最近更新 更多