【问题标题】:What is the meaning of a specific part of an SQL statement?SQL 语句的特定部分的含义是什么?
【发布时间】:2013-12-11 11:42:17
【问题描述】:

我们将 sql server 表的更改作为脚本保存在 TFS 中。当我从 SMSS 获得更改脚本时,脚本底部有一行。哪个是;

select 
  Has_Perms_By_Name(N'dbo.MyTableName', 'Object', 'ALTER') as ALT_Per, 
  Has_Perms_By_Name(N'dbo.MyTableName', 'Object', 'VIEW DEFINITION') as View_def_Per,
  Has_Perms_By_Name(N'dbo.MyTableName', 'Object', 'CONTROL') as Contr_Per 

这条线的目的是什么?如果我从我的脚本文件中省略这一行有关系吗?

【问题讨论】:

标签: sql sql-server


【解决方案1】:

查询使用内置函数HAS_PERMS_BY_NAME报告当前用户对目标对象的权限。

版本控制不需要它,所以你可以省略它。

【讨论】:

  • 好的,它报告了用户对目标对象的权限但是为什么它包含在更改脚本中?
  • @ozdogan - 这可能与您的 SSMS 脚本选项有关。您究竟是如何生成脚本的,以及使用哪个版本的 SSMS?
  • SMSS -> 工具 -> 选项 -> 设计器 -> 自动生成更改脚本
  • @ozdogan - 我无法在 SQL 2008 R2 SP2 或 SQL 2012 express 上复制;每次更改都会发生这种情况,还是仅发生某些类型的更改?
  • 是的,每次更改都会发生。请转到我之前说的设置,检查选项。然后在任何表格的设计模式下进行一些更改,然后单击“保存”按钮,以保存更改。此时会自动出现一个带有相关更改脚本的窗口。
【解决方案2】:

函数Has_Perms_By_Name(...)评估当前用户对表的权限。

语法是:

HAS_PERMS_BY_NAME ( securable , securable_class , permission  
[ , sub-securable ] [ , sub-securable_class ] )

安全:是安全的名称。如果安全对象是服务器本身,则该值应设置为 NULL。 securable 是 sysname 类型的标量表达式。没有默认值。

securable_class:是测试权限的安全类的名称。 securable_class 是 nvarchar(60) 类型的标量表达式。

permission:sysname 类型的非空标量表达式,表示要检查的权限名称。没有默认值。权限名称 ANY 是通配符。

sub-securable:sysname 类型的可选标量表达式,表示测试权限的安全子实体的名称。默认为 NULL。

sub-securable_class:nvarchar(60) 类型的可选标量表达式,表示测试权限所针对的安全子实体的类。默认为 NULL。

函数的返回类型是一个int,并定义当前用户是否具有指定的权限。

另外,看看这个link

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 2021-06-01
    • 2011-02-06
    • 2023-03-28
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 2023-04-11
    • 2020-03-24
    相关资源
    最近更新 更多