在mssql中有很多安全函数用来获取系统或者服务中的安全信息。获取安全证书的信息,很多操作程序上可能没有权限但是mssql数据库可能有权限获取到或者更容易获取到想要的额安全数据集,在安全性比较高的程序上有一些用户自己创建的安全证书等安全信息都需要通过数据库进行认证和对比这样就需要安全函数来返回相应的结果来对比本次操作是否安全或者来确定本次操作是否合法。

CERTPRIVATEKEY函数返回一个二进制格式的证书私钥。函数有三个参数。一是证书ID。二是加密密码(加密密码用于加密函数返回的私钥位) 这种方法不会以明文的形式向用户显示密钥。三是可选的解密密码。指定的解密密码用于解开此证书的私钥。否则使用数据库主密钥。只有可以访问证书私钥的用户可以使用此函数。 此函数返回PVK格式的私钥。

CERTENCODED函数返回一个二进制格式的证书的公共部分。此函数将证书的ID作为函数的参数,并返回已编码好的证书。语法【CERTENCODED(cert_id)】参数cert_id是证书的ID。在sys证书中找到此值;CERT_ID (Transact-SQL) 函数也将返回该值。cert_id为int数据类型。函数的返回类型为varbinary类型。同时使用 CERTENCODED 和 CERTPRIVATEKEY 以二进制格式返回证书的其他部分。

PWDCOMPARE函数对密码进行哈希操作,函数将该哈希与现有密码的哈希进行对比。此函数可用于搜索空的 SQLServer登录密码或常见的弱密码。函数的返回值为int类型,如果clear_text_password的哈希与 password_hash相匹配,则返回1,反之则返回0。PWDCOMPARE函数不会威胁密码哈希的能力,因为可通过尝试使用作为第一个参数提供的密码登录,执行相同的测试。PWDCOMPARE不能与包含数据库用户的密码一起使用。没有等效的包含数据库。

PWDENCRYPT函数返回使用密码哈希算法的当前版本的输入值的SQL Server密码哈希。PWDENCRYPT是一个比较旧的函数,在 SQLServer的将来版本中可能不再支持。改用HASHBYTES。HASHBYTES提供更多的哈希算法。

CURRENT_USER函数返回当前用户的名称。此函数等效于USER_NAME()。语法【select CURRENT_USER】,函数没有参数返回类型为sysname类型。CURRENT_USER返回当前安全上下文的名称。如果在EXECUTE AS的调用切换上下文后执行CURRENT_USER将返回被模拟上下文的名称。如果Windows主体通过某组中的成员身份访问数据库,则函数返回Windows主体的名称,而不是该组名。

SCHEMA_ID函数返回与架构名称关联的架构ID。语法【SCHEMA_ID([schema_name])】,函数将返回系统架构的ID和用户定义架构的ID。此函数可以在选择列表、WHERE子句和任何允许使用表达式的地方调用。

SCHEMA_NAME函数返回与架构 ID 关联的架构名称。函数返回系统架构和用户定义架构的名称。可以在选择列表、WHERE子句和任何允许使用表达式的地方调用SCHEMA_NAME函数。

DATABASE_PRINCIPAL_ID函数返回当前数据库中的主体的ID号。在所选列表、WHERE子句或允许使用表达式的任何位置使用DATABASE_PRINCIPAL_ID。

sys.fn_builtin_permissions函数返回服务器内置权限层次结构的说明。sys.fn_builtin_permissions只有在调用 SQL Server和Azure SQL Database,并返回而不考虑是否受当前平台上的所有权限。大多数权限适用于所有平台,但有些则不适用。例如不能在SQL数据库上授予服务器级别权限。

SESSION_USER函数返回当前数据库中当前上下文的用户名。语法【SELECT SESSION_USER】,函数没有参数直接调用,返回类型为nvarchar(128)数据类型,SESSION_USER可在CREATE TABLE或ALTER TABLE语句中与DEFAULT约束一起使用,或者将它用作任何标准函数。如果没有指定默认值,可以将SESSION_USER插入表中。此函数没有参数。SESSION_USER可以在查询中使用。如果在切换上下文之后调用SESSION_USER,SESSION_USER将返回模拟上下文的用户名。

SUSER_ID函数返回用户的登录标识号。从 SQL Server 2005 开始,SUSER_ID 返回在 sys.server_principals 目录视图中作为 principal_id列出的值。此函数仅为已经在SQLServer中显示提供的登录名返回标识号。此ID在 SQLServer中用于跟踪所有权和权限。此ID不等同于SUSER_SID返回的登录名的SID。如果login是SQLServer 登录名,则SID映射到GUID。如果login是Windows登录名或Windows组,则SID映射到Windows安全标识符。

SUSER_SID函数返回指定登录名的安全标识号 (SID)。SUSER_SID在ALTER TABLE或CREATE TABLE中可用作 DEFAULT约束。SUSER_SID可以在选择列表、WHERE子句和任何允许使用表达式的地方使用。SUSER_SID必须始终后跟括号,即使在未指定参数的情况下也是如此。

USER_SNAME函数返回与安全标识号 (SID) 关联的登录名。SUSER_SNAME在ALTER TABLE或CREATE TABLE中可用作DEFAULT约束。SUSER_SNAME可以在选择列表、WHERE子句和任何允许使用表达式的地方使用。SUSER_SNAME必须始终后跟括号,即使在未指定参数的情况下也是如此。

HAS_PERMS_BY_NAME函数评估当前用户对安全对象的有效权限。此内置函数将测试当前主体对于指定的安全对象是否具有特定的有效权限。 如果用户具有针对安全对象的有效权限,HAS_PERMS_BY_NAME 返回 1;如果用户不具有针对安全对象的有效权限,返回 0;如果安全对象类或权限无效,返回 NULL。

IS_MEMBER函数指示当前用户是否为指定 Microsoft Windows 组或 SQL Server 数据库角色的成员。

SYSTEM_USER函数当未指定默认值时,允许将系统为当前登录名提供的值插入表中。您可以在 CREATE TABLE 和 ALTER TABLE 语句中将 SYSTEM_USER 函数与 DEFAULT 约束一起使用。 还可以将此函数用作任意标准函数。如果用户名与登录名不同,则 SYSTEM_USER 返回登录名。

SUSER_NAME函数返回用户的登录标识名。在SQL7.0中,安全标识号(SID)取代了服务器用户标识号 (SUID)。SUSER_NAME只返回在syslogins系统表中有条目的登录的登录名。SUSER_NAME可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用,并且后面必须始终要有一对圆括号,即使未指定任何参数时也是如此。

关键词: sql2005