查看用户和登录的属性

SQL Server的安全主体主要分为Login、User和Role,不仅有ID属性,还有Name属性和SID属性,SID是指Security ID。在查看用户和登录的时候,受到模拟上下文的影响。当执行EXECUTE AS命令,切换上下文之后,除了ORIGINAL_LOGIN之外,其他函数都会返回模拟上下文的Login和User信息。

一,查看数据库用户

数据库主体,可以从sys.database_principals中查看,不仅包含User,还包括数据库角色(DATABASE_ROLE)。每一个user不仅有ID属性,还有Name属性和SID属性。

数据库用户是指在特定的数据库中创建的用户,分为SQL_USER、WINDOWS_USER和WINDOWS_GROUP三种类型。用户的Name属性,是指数据库主体的name属性,用户的ID属性,是指数据库主体的principal_id属性。

1,查看数据库用户的name

查看数据库用户的name,使用CURRENT_USER 和 USER_NAME()。如果用户使用EXECUTE AS命令切换上下文,那么CURRENT_USER和 USER_NAME() 返回模拟上下文的用户的Name。如果用户通过Windows 验证返回数据库,并且是Windows Group的成员,那么CURRENT_USER和 USER_NAME()返回Windows主体的名称,而不是Group的名称。

对于CURRENT_USER

返回当前安全上下文User Name,该函数等价于USER_NAME()函数。

CURRENT_USER

比如,sysadmin 服务器角色的成员,其CURRENT_USER就是dbo。如果登录的用户是domain\user1,属于domain\group1的成员,通过group1的权限来访问数据库,那么CURRENT_USER返回的Windows 主体的名称是domain\user1。

对于USER_NAME()函数

参数id是int类型,通过用户id来返回用户的name,如果省略参数,返回当前用户的name。

USER_NAME ( [ id ] )

对于USER

USER和 USER_NAME()函数的功能相同。

USER  

2,查看数据库用户的ID

通过用户的name来查看用户的ID:

USER_ID ( [ ‘user‘ ] )

用户和角色都属于数据库主体,也可以通过DATABASE_PRINCIPAL_ID()来查看用户的ID:

DATABASE_PRINCIPAL_ID ( ‘principal_name‘ )  

二,查看服务器登录

Login(登录)是服务器主体(Server Principal),除了Login之外,服务器主体还包括SERVER_ROLE。

从sys.server_principals中查看Login的属性,Login分为三个类型:SQL_LOGIN、WINDOWS_LOGIN和WINDOWS_GROUP。

每个Login都有Name属性、ID属性和一个安全标识(SID)。Login ID是指服务器主体的 principal_id属性,Login Name是指服务器主体的name属性。

1,查看Login的Name属性

通过SYSTEM_USER返回当前Login的名称:

SYSTEM_USER  

通过SUSER_NAME()函数返回指定Login ID的名称,参数是Login ID(principal_id):

SUSER_NAME ( [ server_user_id ] ) 

如果省略参数server_user_id,那么返回当前Login的名称。

2,查看Login的ID属性

通过Login的Name来查看Login的ID属性:

SUSER_ID ( [ ‘login‘ ] ) 

三,SID和ID

当创建一个Login(SQL Login 或 Windows Login)时,系统会自动创建Login的 ID 和 SID,从sys.server_principals 系统视图中,看到该Login对应一个ID和SID。在SQL Server实例中,ID和SID都是唯一的,不同之处是,ID标识Login,将Login作为一个安全主体,SID标识Login的安全上下文(Security Context)。一般来说,ID可以重用,但是SID一般是不会重用的。当同一个Login重复创建时,其Login ID可能发生变化,但是其SID不变。

不仅Login有ID和SID,Database User也有。当创建一个数据库user时,从sys.database_principals中,能够看到该User被指定一个ID和SID。在数据库级别,User的ID是唯一的。

在创建User时,需要把User和Login映射起来,这就使得User和Login具有相同的SID属性。关于SID和ID的详细信息,请阅读《SIDs and IDs

通过Login的Name查看SID:

SUSER_SID ( [ ‘login‘ ] [ , Param2 ] )  

通过SID查看Login的Name属性:

SUSER_SNAME ( [ server_user_sid ] )

四,检查成员关系

检查某一个用户或Login是否属于Windows Group或Role(Database Role 或 Server Role)的成员。

1,检查当前用户是不是Windows Group和 Database Role的成员:

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

2,检查指定的数据库主体是不是Database Role的成员

IS_ROLEMEMBER ( ‘role‘ [ , ‘database_principal‘ ] ) 

3,检查Login是不是Server Role的成员

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

五,模拟上下文和原始上下文

当执行EXECUTE AS 命令之后,用户的安全上下文会被切换为指定的用户。ORIGINAL_LOGIN() 返回最原始的Login名称,不受上下文切换的影响:

ORIGINAL_LOGIN( ) 

其他返回用户和Login的函数,都是基于当前上下文的。

比如,SESSION_USER返回当前安全上下文的用户名称,如果该函数在EXECUTE AS 命令之后被调用,那么上下文被切换,SESSION_USER返回模拟上下文的用户名称:

SESSION_USER 

参考文档:

Security Functions (Transact-SQL)

原文地址:https://www.cnblogs.com/ljhdo/p/11763422.html

时间: 2024-08-01 16:03:29

查看用户和登录的属性的相关文章

linux 查看用户常用命令

用登录查看 w 查看用户的登录信息          1 分钟          5分钟         15分钟之前的平均负载 tty1 带表本机终端 pts/0 带表远程终端 user:登录的用户名 tty:登录终端 from:从哪个ip地址登录进来 [email protected]:登录时间 idle:用户闲置时间 jcpu:指的是和该终端链接的所有进程占用时间. pcpu:指当前进程所占用的时间 what:当前正在运行的命令 who 也可以查看系统的登录信息命令输出: 用户名 登录终端

Linux 查看系统用户的登录日志

查看用户登录系统的日志 有两类日志记录用户登录的行为,一是记录登录者的数据,一个是记录用户的登录时间 一,记录用户登录数据 /var/log/wtmp日志文件记录用户登录的数据.但这个文件是被编码的文件,不能直接用vi.cat等命令查看,可以用last命令读取.每一次登录就会产生一条记录,包括用户名.登录端.时间跨度等信息,如下: www.2cto.com [html] [[email protected] ~]# last root     pts/1        :0.0        

查看用户登录信息并统计登陆的次数

一.查看用户登录信息的命令 1.    w                查看当前系统上登录的所有用户的信息 2.    who            查看该shell终端下登录用户的详细信息 3.    whoami      查看本shell终端下登陆的用户 4.    last            查看历史的所有登录信息 [[email protected]_server workspace]# w  14:59:23 up 19 days,  5:35,  1 user,  load 

ubuntu下如何查看用户登录及系统授权相关信息【转】

转自:http://www.tuicool.com/articles/ia67Bj 如何在ubuntu下查看相关用户登录历史,进行系统的日志跟踪和分析,以便发现系统登录问题,进行安全策略防护呢?ubuntu下的一些命令提供了很好的管理手段方法,较好地满足您的这些需求. 1,使用who命令查看当前登录状况. 如图所示,通过who命令可以查看到当前用户及ip的登录情况. 2,使用last命令查看最近登录情况. 如图所示,last命令列出最近一段时间的用户登录时间及ip记录. 3,使用lastlog命

(九)Linux查看用户登录的命令

用户登录查看命令 w 含义:就这么简单,一个字母w就是一个命令.查看登录用户信息. 输出的结果的含义: USER       登录的用户名 TTY        登录终端 FROM      从哪个IP地址登录 [email protected]    登录时间 IDLE       用户闲置时间 JCPU      指的是和该终端连接的所有进程占用的时间,这个时间里并不包括过去的后台 作业时间,但却包括当前正在运行的后台作业所占用的时间 PCPU      当前进程所占用的时间 WHAT   

linux学习之路之ACL的使用和查看系统上登录的用户的命令使用

我们知道文件的访问权限的是根据文件的属主.属组和其他用户这三种来设置,而ACL是提供这三种之外的更加细部的权限设定.ACL可以对单一用户和目录及文件来设置权限,这对于需要特殊的权限来说很有帮助.在之前谈到的SUID和SGID这些特殊权限,不过这些特殊权限和ACL相比,ACL可以对特定的用户来设定更加细部的权限,而SUID和SGID则是对于多个用户或者一组用户来说比较合适. 在谈ACL的使用之前,我们先一起来谈谈用户访问文件时的顺序是如何进行的?在这里暂时不讨论有关SElinux的使用. 在没有使

.每隔5秒查看hadoop用户是否登录,如果登录,显示其登录并退出;否则,显示当前时间,并说明hadoop尚未登录

36.每隔5秒查看hadoop用户是否登录,如果登录,显示其登录并退出:否则,显示当前时间,并说明hadoop尚未登录: #!/bin/bash # who| grep "hadoop" &> /dev/null RETVAL=$? while[ $RETVAL -ne 0 ]; do echo "`date`, hadoop is not log." sleep 5 who | grep "hadoop" &>/de

ubuntu下如何查看用户登录及系统授权相关信息

1,使用who命令查看当前登录状况. 如图所示,通过who命令可以查看到当前用户及ip的登录情况. 2,使用last命令查看最近登录情况. 如图所示,last命令列出最近一段时间的用户登录时间及ip记录. 3,使用lastlog命令查看各个用户登录情况 如图所示,lastlog命令列出了各个用户的登录情况,如果没有登录过,则显示Never logged in,如果有登录历史,则显示出ip及登录时间. 4,查看/var/log/auth.log文件,分析用户登录及行为. 如图所示,通过查看auth

?oracle查看用户登录失败次数及详细信息

oracle查看用户登录失败次数及详细信息 一. 具体步骤 查看用户信息 查看默认PROFILE的策略 查看XYSOUL用户登录的失败次数 select lcount from user$ where name='DPM'; 下面开启审计,并查看审计信息 -查看当前审计信息 set lines 200 col userhost for a20 col COMMENT$TEXT for a30 col SPARE1 for a20 col NTIMESTAMP# for a35 select se