【问题标题】:What is object in the GRANT <permission> in SQL Server?SQL Server 中的 GRANT <permission> 中的对象是什么?
【发布时间】:2014-03-14 12:33:05
【问题描述】:

中的[ OBJECT :: ][ schema_name ]. object_name 可能是什么
GRANT <permission> [ ,...n ] ON 
        [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
        TO <database_principal> [ ,...n ] 
        [ WITH GRANT OPTION ]
        [ AS <database_principal> ]

可以是表格还是视图?

【问题讨论】:

  • 我猜是表或视图或数据库

标签: sql-server tsql view sql-grant


【解决方案1】:

这里的OBJECT指的是sys.objects中存在的任何东西。从documentation for sys.objects,可以是任何一个

  • AGGREGATE_FUNCTION
  • CHECK_CONSTRAINT
  • CLR_SCALAR_FUNCTION
  • CLR_STORED_PROCEDURE
  • CLR_TABLE_VALUED_FUNCTION
  • CLR_TRIGGER
  • DEFAULT_CONSTRAINT
  • EXTENDED_STORED_PROCEDURE
  • FOREIGN_KEY_CONSTRAINT
  • INTERNAL_TABLE
  • 计划指南
  • PRIMARY_KEY_CONSTRAINT
  • REPLICATION_FILTER_PROCEDURE
  • 规则
  • SEQUENCE_OBJECT
  • SERVICE_QUEUE
  • SQL_INLINE_TABLE_VALUED_FUNCTION
  • SQL_SCALAR_FUNCTION
  • SQL_STORED_PROCEDURE
  • SQL_TABLE_VALUED_FUNCTION
  • SQL_TRIGGER
  • 同义词
  • SYSTEM_TABLE
  • TABLE_TYPE
  • UNIQUE_CONSTRAINT
  • USER_TABLE
  • 查看

请注意,并非所有权限都适用于每种类型的对象。例如,您不能授予表执行权限。事实上,并不是每个对象类型都可以成为授权的目标(例如,主键)。 documentation for grant 在每种安全类型的底部附近都有一个很好的列表,并链接到文档页面,以了解可以授予它哪些权限。

【讨论】:

    【解决方案2】:

    我不完全确定这是否是您要问的,但这里的 OBJECT :: 关键字并不是要被某种标识符(例如 TABLE ::)替换,而是要按字面意思指定为OBJECT ::。它用于指示您要授予对象而不是模式的权限。根据this page,对象是任何模式级别的安全对象,例如表、视图、存储过程、序列等。

    同样根据该页面,如果指定了schema_name,则OBJECT :: 关键字是可选的。这让我相信指定OBJECT :: 的需要只是为了确保数据库是授予权限的实体类型,因为权限可以授予对象、模式、服务器原则等。

    【讨论】:

    • 所以在 sql 语句中授权执行 ON foo.Addresses TO newAddresses - foo.Addresses 是一个表?
    • 如果没有更多信息,就无法知道这一点。 GRANT 语句并非特定于表,仅适用于模式级对象。它可以是表格、视图、序列或许多其他类型的对象。如果您所追求的是一种从这些 GRANT 语句中推断数据库架构的方法,恐怕这还不够。
    猜你喜欢
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多