• SQL內置Function安全函数


    安全函数

    这些安全函数返回有关用户和角色的信息。

    fn_trace_geteventinfo

    IS_SRVROLEMEMBER

    fn_trace_getfilterinfo

    SUSER_SID

    fn_trace_getinfo

    SUSER_SNAME

    fn_trace_gettable

    USER_ID

    HAS_DBACCESS

    USER

    IS_MEMBER

     

     

    所有的安全函数都具有不确定性。每次用一组特定的输入值调用它们时,所返回的结果不总是相同。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。

    1fn_trace_geteventinfo

    返回有关跟踪的事件信息。

    语法

    fn_trace_geteventinfo ( [ @traceid = ] trace_id )

    参数

    [ @traceid = ] trace_id

    此跟踪的 ID,trace_id 的数据类型为 int,没有默认设置。用户使用 trace_id 值识别、修改和控制跟踪。

    返回表

    列名

    数据类型

    描述

    EventID

    int

    跟踪的事件的 ID

    ColumnID

    int

    为每个事件收集的所有列的 ID 号

     

    注释

    fn_trace_geteventinfo 是 Microsoft® SQL Server™ 2000 的内置函数,该函数执行许多以前由 SQL Server 早期版本提供的扩展存储过程所执行的操作。使用 fn_trace_geteventinfo 而不使用:

    • xp_trace_geteventclassrequired
    • xp_trace_getqueuecreateinfo
    • xp_trace_getqueueproperties

    若要获得过去由 xp_trace_geteventclassrequired 返回的信息,例如,用下列格式执行查询:

    SELECT *
    FROM ::fn_trace_geteventinfo(trace_id)
    WHERE EventID= 'x'

     

    2fn_trace_getfilterinfo

    返回有关应用于指定跟踪的筛选的信息。

    语法

    fn_trace_getfilterinfo( [ @traceid = ] trace_id )

    参数

    [ @traceid = ] trace_id

    此跟踪的 ID,trace_id 的数据类型为 int,没有默认设置。用户使用 trace_id 值识别、修改和控制跟踪。

    返回表

    该函数返回下列信息。有关这些列的更多信息,请参见 sp_trace_setfilter。

    列名

    数据类型

    描述

    Column ID

    int

    应用筛选的列的 ID。

    Logical Operator

    int

    指定是否应用 AND 或 OR 运算符。

    Comparison Operator

    int

    指定比较类型(=、<>、<、>、<=、>=、LIKE 或 NOT LIKE)。

    Value

    sql_variant

    指定应用筛选的值。

     

    注释

    fn_trace_getfilterinfo 是 Microsoft® SQL Server™ 2000 的内置函数,该函数执行许多以前由 SQL Server 早期版本提供的扩展存储过程所执行的操作。使用 fn_trace_getfilterinfo 代替 xp_trace_get*filter 扩展存储过程。有关更多信息,请参见创建并管理跟踪和模板。

    若要使用 fn_trace_getfilterinfo 以获得有关特定跟踪应用的或可用的筛选的信息,请执行下列格式的查询:

    SELECT *
    FROM ::fn_trace_getfilterinfo(trace_id)
    WHERE

    3fn_trace_getinfo

    返回有关指定跟踪或现有跟踪的信息。

    语法

    fn_trace_getinfo( [ @traceid = ] trace_id )

    参数

    [ @traceid = ] trace_id

    是跟踪的 ID,为整数。若要返回有关所有跟踪的信息,请指定该参数的默认值。必须使用关键字"default",如下所示

    SELECT * FROM :: fn_trace_getinfo(default) 

    当显式提供 0 值时,该函数将返回所有的跟踪,就像用"default"关键字调用该函数一样。用户使用 trace_id 值标识、修改和控制跟踪。

    返回表

    如果指定了 trace_id,则 fn_trace_getinfo 返回含有指定跟踪信息的表。如果没有指定 trace_id,则该函数返回所有活动跟踪的信息。

    列名

    数据类型

    描述

    TraceId

    int

    此跟踪的 ID。

    Property

    int

    跟踪的属性,由下列整数表示:

    1 – 跟踪选项(请参见 sp_trace_create 中的 @options)
    2 – FileName
    3 – MaxSize
    4 – StopTime
    5 – 当前跟踪状态

    Value

    sql_variant

    有关指定跟踪的属性的信息。

     

    注释

    fn_trace_getinfo 是 Microsoft® SQL Server™ 2000 的内置函数,该函数执行许多以前由 SQL Server 早期版本提供的扩展存储过程所执行的操作。使用 fn_trace_getinfo 代替下列函数:

    • xp_trace_getqueuecreateinfo
    • xp_trace_getqueuedestination
    • xp_trace_getqueueproperties

    若要获得过去由 xp_trace_getqueueproperties 返回的信息,例如,用下列格式执行查询:

    SELECT *
    FROM ::fn_trace_getinfo(trace_id)
    WHERE Property=4

    4fn_trace_gettable

    以表格格式返回跟踪文件信息。

    语法

    fn_trace_gettable( [ @filename = ] filename , [ @numfiles = ] number_files )

    参数

    [ @filename = ] filename

    指定要读取的初始跟踪。filename 的数据类型为 nvarchar(256),没有默认设置。

    [ @numfiles = ] number_files

    指定要读取的翻转文件数,包括在 filename 中指定的初始文件。number_files 的数据类型为 int。用户可指定默认值"default"以指示 SQL Server 读取全部翻转文件直至跟踪结束。

    SELECT * FROM ::fn_trace_gettable('c:\my_trace.trc', default)
    GO

    SELECT * FROM ::fn_trace_gettable(('c:\my_trace.trc', -1)
    GO
    返回表

    fn_trace_gettable 返回含有所有有效列的表。有关信息,请参见 sp_trace_setevent。

    示例

    下例将该函数作为 SELECT..INTO 语句的一部分调用,并返回可以装入 SQL 事件探查器的表。

    USE pubs
    SELECT * INTO temp_trc
    FROM ::fn_trace_gettable(c:\my_trace.trc", default)

    5HAS_DBACCESS

    返回信息,说明用户是否可以访问指定的数据库。

    语法

    HAS_DBACCESS ( 'database_name' )

    参数

    database_name

    数据库的名称,用户想获取有关该数据库的访问信息。database_name 的数据类型为 sysname。

    返回类型

    int

    6IS_MEMBER

    表明当前用户是否是指定 Microsoft® Windows NT® 组或 Microsoft SQL Server™ 角色的成员。

    语法

    IS_MEMBER ( { 'group' | 'role' } )

    参数

    'group'

    被检查的 Windows NT 组的名称;必须用 Domain\Group 这种格式。group 的数据类型为 sysname。

    'role'

    被检查的 SQL Server 角色的名称。role 的数据类型为 sysname,它可以包括数据库固定角色或用户定义的角色,但不包括服务器角色。

    返回类型

    int

    注释

    IS_MEMBER 返回下面三个值。

    返回值

    描述

    0

    当前用户不是 group 或 role 的成员。

    1

    当前用户是 group 或 role 的成员。

    NULL

    group 或 role 是无效的。

     

    如果要通过程序检测当前用户是否可以执行某个活动(该活动依赖于应用到组或角色的权限),那么这个函数很有用。

    示例

    下面的示例指明当前用户是否为 db_owner 固定数据库角色的成员。

    IF IS_MEMBER ('db_owner') = 1
       print 'Current user is a member of the db_owner role'
    ELSE IF IS_MEMBER ('db_owner') = 0
       print 'Current user is NOT a member of the db_owner role'
    ELSE IF IS_MEMBER ('db_owner') IS NULL
       print 'ERROR: Invalid group / role specified'

    7IS_SRVROLEMEMBER

    指明当前的用户登录是否是指定的服务器角色的成员。

    语法

    IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )

    参数

    'role'

    被检查的服务器角色的名称。role 的数据类型为 sysname。

    role 有效的值是:

    • sysadmin
    • dbcreator
    • diskadmin
    • processadmin
    • serveradmin
    • setupadmin
    • securityadmin

    'login'

    将要检查的登录的可选名称。login 的数据类型为 sysname,默认值为 NULL。如果未指定,那么使用当前用户的登录帐户。

    返回类型

    int

    注释

    IS_SRVROLEMEMBER 返回下面三个值。

    返回值

    描述

    0

    login 不是 role 的成员。

    1

    login 是 role 的成员。

    NULL

    role 或 login 是无效的。

     

    如果要通过程序检测当前用户是否可以执行某个活动(该活动要求服务器角色的权限),那么这个函数很有用。

    如果为 login 指定一个 Windows NT 用户(例如 London\JoeB),而先前没有使用 sp_grantlogin 或 sp_denylogin 授予或拒绝该用户直接访问 Microsoft SQL Server 的权限,那么 IS_SRVROLEMEMBER 就会返回 NULL。

    示例

    下面的示例指明当前用户是否为 sysadmin 固定服务器角色的成员。

    IF IS_SRVROLEMEMBER ('sysadmin') = 1
       print 'Current user''s login is a member of the sysadmin role'
    ELSE IF IS_SRVROLEMEMBER ('sysadmin') = 0
       print 'Current user''s login is NOT a member of the sysadmin role'
    ELSE IF IS_SRVROLEMEMBER ('sysadmin') IS NULL
       print 'ERROR: Invalid server role specified'

    8SUSER_SID

    返回用户登录名的安全标识号 (SID)。

    语法

    SUSER_SID ( [ 'login' ] )

    参数

    'login'

    是用户的登录名。login(可选)的数据类型为 sysname,可以是 Microsoft® SQL Server™ 登录或 Microsoft Windows NT® 用户或组。如果未指定 login,则返回有关当前用户的信息。

    返回类型

    varbinary(85)

    注释

    当使用 SQL Server 身份验证指定 SQL Server 登录时,必须授予用户连接到 SQL Server 的权限。使用 sp_addlogin 或 SQL Server 企业管理器授予该权限。但是,当使用 Windows 身份验证指定 Windows NT 用户或组时,不必授予该用户或组连接到 SQL Server 的权限。

    SUSER_SID 在 ALTER TABLE 或 CREATE TABLE 中可用作 DEFAULT 约束。

    系统函数可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用,并且后面必须始终有圆括号(即使未指定任何参数)。

    示例
    A. 使用 SUSER_SID

    下例返回 SQL Server sa 登录的安全标识号。

    SELECT SUSER_SID('sa')
    B. 对 Windows NT 用户名使用 SUSER_SID

    下例返回 Windows NT 用户 London\Workstation1 的安全标识号。

    SELECT SUSER_SID('London\Workstation1')
    C. 将 SUSER_SID 用作 DEFAULT 约束

    下例在 CREATE TABLE 语句中将 SUSER_SID 用作 DEFAULT 约束。

    USE pubs
    GO
    CREATE TABLE sid_example
    (
    login_sid   varbinary(85) DEFAULT SUSER_SID(),
    login_name varchar(30) DEFAULT SYSTEM_USER,
    login_dept varchar(10) DEFAULT 'SALES',
    login_date datetime DEFAULT GETDATE()
    ) 
    GO
    INSERT sid_example DEFAULT VALUES
    GO

    9SUSER_SNAME

    从用户的安全标识号 (SID) 返回登录标识名。

    语法

    SUSER_SNAME ( [ server_user_sid ] )

    参数

    server_user_sid

    是用户的安全标识号。server_user_sid(可选)的数据类型为 varbinary(85),可以是任何 Microsoft® SQL Server™ 登录或 Microsoft Windows NT® 用户或组的安全标识号。如果未指定 server_user_sid,则返回有关当前用户的信息。

    返回类型

    nvarchar(256)

    注释

    当使用 SQL Server 身份验证指定 SQL Server 登录时,必须授予用户连接到 SQL Server 的权限。使用 sp_addlogin 或 SQL Server 企业管理器授予该权限。但是,当使用 Windows 身份验证指定 Windows NT 用户或组时,不必授予该用户或组连接到 SQL Server 的权限。

    SUSER_SNAME 在 ALTER TABLE 或 CREATE TABLE 中可用作 DEFAULT 约束。

    系统函数可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用,并且后面必须始终有圆括号(即使未指定任何参数)。

    示例
    A. 使用 SUSER_SNAME

    下例返回值为 0x01 的安全标识号的登录名。

    SELECT SUSER_SNAME(0x01)
    B. 对 Windows NT 用户的安全标识号使用 SUSER_SNAME

    下例返回(通过使用 SUSER_SID 获得的)Windows NT 用户安全标识号的登录名。

    SELECT SUSER_SNAME(0x010500000000000515000000a065cf7e784b9b5fe77c87705a2e0000)
    C. 将 SUSER_SNAME 用作 DEFAULT 约束

    下例在 CREATE TABLE 语句中将 SUSER_SNAME 用作 DEFAULT 约束。

    USE pubs
    GO
    CREATE TABLE sname_example
    (
    login_sname sysname DEFAULT SUSER_SNAME(),
    employee_id uniqueidentifier DEFAULT NEWID(),
    login_date datetime DEFAULT GETDATE()
    ) 
    GO
    INSERT sname_example DEFAULT VALUES
    GO

    10USER_ID

    返回用户的数据库标识号。

    语法

    USER_ID ( [ 'user' ] )

    参数

    'user'

    要使用的用户名,user 的数据类型为 nchar。如果指定的是 char 类型的值,则将其隐式转换为 nchar 类型。

    返回类型

    smallint

    注释

    当省略 user 时,则假定为当前用户。必须加上圆括号。

    USER_ID 可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用。有关更多信息,请参见表达式。

    示例

    本示例返回用户 Harold 的标识号。

    SELECT USER_ID('Harold')

    11USER

    当未指定默认值时,允许将系统为当前用户的数据库用户名提供的值插入表内。

    语法

    USER

    返回类型

    char

    注释

    USER 提供与 USER_NAME 系统函数相同的功能。

    在 CREATE TABLE 或 ALTER TABLE 语句中将 USER 和 DEFAULT 约束一起使用,或者将 USER 作为任何标准函数使用。

    示例
    A. 使用 USER 返回当前用户的数据库用户名

    本示例声明一个 char 类型的变量,将 USER 的当前值赋给它,然后打印该变量以及文本说明。

    DECLARE @usr char(30)
    SET @usr = user
    SELECT 'The current user's database username is: '+ @usr
    GO

    下面是结果集:

    ----------------------------------------------------------------------- 
    The current user's database username is: dbo                            
     
    (1 row(s) affected)
    B. 将 USER 和 DEFAULT 约束一起使用

    本示例生成一个表,将 USER 用作销售行的销售员的 DEFAULT 约束。

    USE pubs
    GO
    CREATE TABLE inventory2
    (
     part_id int IDENTITY(100, 1) NOT NULL,
     description varchar(30) NOT NULL,
     entry_person varchar(30) NOT NULL DEFAULT USER 
    )
    GO
    INSERT inventory2 (description)
    VALUES ('Red pencil')
    INSERT inventory2 (description)
    VALUES ('Blue pencil')
    INSERT inventory2 (description)
    VALUES ('Green pencil')
    INSERT inventory2 (description)
    VALUES ('Black pencil')
    INSERT inventory2 (description)
    VALUES ('Yellow pencil')
    GO

    下面是从表 inventory2 中选择所有信息的查询:

    SELECT * 
    FROM inventory2
    ORDER BY part_id
    GO

    下面是结果集(注意 entry-person 的值):

    part_id     description                    entry_person                   
    ----------- ------------------------------ -----------------------------
    100         Red pencil                     dbo                            
    101         Blue pencil                    dbo                            
    102         Green pencil                   dbo                            
    103         Black pencil                   dbo                            
    104         Yellow pencil                  dbo                            
     
    (5 row(s) affected)

     

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    全新 D 系列虚拟机型号
    D 系列性能预期
    Azure Backup 入门
    对 Azure Backup 的常见配置问题进行故障排除
    宣布发布长期保留 Azure Backup功能
    宣布 Azure Backup 支持备份 Windows Server 2008
    Azure Backup 简介
    MongoDB中ObjectId的误区,以及引起的一系列问题
    UNIX/Linux_C_程序员需要掌握的七种武器
    Docker企业版安装指南
  • 原文地址:https://www.cnblogs.com/Athrun/p/556585.html
Copyright © 2020-2023  润新知