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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值