AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 260755
Accepted
masksoverflow
masksoverflow
Asked: 2020-02-28 09:56:29 +0800 CST2020-02-28 09:56:29 +0800 CST 2020-02-28 09:56:29 +0800 CST

如果我希望用户查看服务器中每个数据库中的所有表和视图(视图定义),我应该给予用户什么授权

  • 772

我希望用户查看服务器上每个数据库中的所有表和视图。我还希望他们看到视图定义。这样,我还希望能够看到视图是如何创建的。也就是视图里面的查询不是结果

我应该授予他们什么服务器级别的访问权限才能做到这一点?我们有几个数据库,每个数据库中有大量的视图和表。我不想一一手动做

谢谢

sql-server permissions
  • 3 3 个回答
  • 6073 Views

3 个回答

  • Voted
  1. Best Answer
    Hannah Vernon
    2020-02-28T11:15:33+08:002020-02-28T11:15:33+08:00

    GRANT VIEW DEFINITION TO [user];将允许用户查看数据库中结构的定义,包括表、视图、存储过程等。

    您需要为实例上的每个数据库执行此操作。没有开箱即用的服务器范围等效项将权限限制为仅数据库级别。

    如果您需要将其限制为单个模式,那么您可以:

    GRANT VIEW DEFINITION ON schema::[name_of_schema] TO [user];

    如果您只希望他们能够看到表和视图的定义(而不是存储的过程等),那么您需要为您希望他们看到定义的每个对象进行一次授权。您可以GRANT使用以下查询为数据库级别的表和视图生成语句:

    SELECT
          ObjectType = o.type_desc
        , ObjectName = o.name
        , GrantStatement = N'GRANT VIEW DEFINITION ON ' + QUOTENAME(o.name) + N' TO [user];'
    FROM sys.objects o
    WHERE o.type = N'U'
        OR o.type = N'V'
    ORDER BY o.type
        , o.name;
    

    有关详细信息,请参阅 Microsoft Docs,网址为https://learn.microsoft.com/en-us/sql/t-sql/statements/grant-database-principal-permissions-transact-sql?view=sql-server-ver15

    如果您愿意在服务器级别为登录分配更多权限,您可以执行以下操作:

    GRANT VIEW ANY DEFINITION TO [name_of_login];
    

    这将允许他们在他们有权访问的任何数据库中查看任何对象的定义,并且还将允许他们在服务器级别查看端点等事物的定义。

    • 10
  2. Tony Hinkle
    2020-02-28T11:23:36+08:002020-02-28T11:23:36+08:00

    您不能在服务器级别分配权限以仅查看表和视图定义,因此以下一组服务器级别授权并不完全符合您的要求,但它是获得所需内容的最低服务器级别权限。VIEW ANY DEFINITION 将允许用户查看所有数据库对象的定义,而不仅仅是表和视图。因此登录将能够看到存储过程、函数等的定义。

    GRANT CONNECT ANY DATABASE TO [user]
    GRANT CONNECT SQL TO [user]
    GRANT VIEW ANY DATABASE TO [user]
    GRANT VIEW ANY DEFINITION TO [user]
    

    如果您希望用户只能看到表和视图定义,则需要在每个视图和表上授予 VIEW DEFINITION。这可以自动化以减轻痛苦,但如果查看任何对象定义的附加权限是可以的,那么上面列出的服务器上的授权将满足您的需要。

    • 6
  3. Maly
    2020-03-06T15:13:24+08:002020-03-06T15:13:24+08:00

    原则上,您应该始终努力创建一个适合您需要的角色,而不是授予用户所需的所有权限。虽然这可能违反直觉,但当“用户离开”、另一个用户需要“相同的权限”、“重新创建用户”等时,它会证明是非常有价值的。一个例子来说明这一点,用户 A 已经工作了很多年,是一个一流的人,并创造和运行了许多“在自己的个人用户下”的工作。有一天他继续工作并获得另一份工作,人力资源部要求您立即删除该用户,第二天的工作 1..n 不运行。

    您尝试将所有工作传递给担任该角色的新用户... 噩梦 #1 列表很广泛,您不想过那些日子。

    相反,您创建一个或多个角色,具有所需的所有权限,并为用户分配这些(或单个)角色。用户离开后,您将其删除,创建一个新用户,授予相同的角色,然后离开。第二天,这只是天堂里的另一天。

    干杯

    • 0

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve