一.数据库登录名,用户名之间的联系和操作
1.创建登录名
CREATE LOGIN h1 WITH PASSWORD ='h1'; CREATE LOGIN h2 WITH PASSWORD ='h2'; CREATE LOGIN h3 WITH PASSWORD ='h3';
注意是在sa登录名下创建;
2.新建连接,登录h1
3.发现在h1下无法访问数据库,意料之中
4.在数据库C1中为登录名h1创建c1_u1
CREATE USER c1_u1 FOR LOGIN h1;
5.现在连接h1可以访问数据库C1了。
6.连接登录名为h2的用户,发现无法打开任何数据库,合情合理
7.我们在C2数据库中创建一个用户c2_u2,注意是在sa的C2查询下
8.这样,我们就可以访问h1登录名中的C1数据库和h2登录名中的C2数据库了,但是我们没法访问h1中的C2数据库,h2中的C1数据库,是因为我们没有在该数据库的查询下为该登录名创建用户。也就是说,我们想打开哪个登录名中的哪个数据库,我们我们就在某数据库登录名为sa的查询中为该登录名创建一个用户。
9.比如,我们在C1数据库的查询中为连接h1,h2分别创建了c1_u1,c1_u2两个用户,所以,我们在登录名h1和h2中都可以访问C1数据库了。
CREATE USER c1_u1 FOR LOGIN h1; CREATE USER c1_u2 FOR LOGIN h2;10.
这是在登录名h2的查询下,如果我们想执行这一句
CREATE USER c2_u2 FOR LOGIN h2;
就会出现这样的错误
除了sa,其它连接是不能私自创建用户的,这样就体现了数据库的安全性。
11.登录名和用户名对于一个数据库级别是一对一映射关系,服务器级别是一对多12.在一个数据库中,不能为多个登录名创建相同的用户名,用户、组或角色'c2_u1' 在当前数据库中已存在,下面是错误的。
CREATE USER c2_u1 FOR LOGIN h1; CREATE USER c2_u1 FOR LOGIN h2;13.一个数据库不能为一个登录名创建多个用户,(该登录已用另一个用户名开立帐户),可以在另外一个数据库中创建
CREATE USER c2_u1 FOR LOGIN h1; CREATE USER c2_u1_2 FOR LOGIN h1;
14.不同的数据库可以定义相同的用户
c2_u1和c2_u1在不同数据库中
SQL Server中Login是针对Server服务器级别的,User是针对数据库级别的,所以具有Login以后,只是说明你具有了登录此Server的权限,但是如果对具体的数据库访问,需要为各个数据库建立对应或是基于此Login的User,不同的数据库中可以建立相同的User ,但是同一数据库内基于同一个Login的User只能有一个。
所以从数据库级别来看 Login:User=1:1; 从服务器级别来看 Login:User=1:N
可以给每一个数据库创建一个基于这个登录名的用户,且在不同数据库中用户名可以相同 这样可以有效的控制该登录名在不同数据库中的权限。
15.角色
C2数据库中创建角色
CREATE ROLE R1; GRANT SELECT ON Course TO R1;
exec sp_addrolemember 'R1','c2_u1';授予用户权限
由于是在C2数据库中创建的角色,虽然C1数据库用户名和C2数据库用户名相同,但是只能查询C2数据库中的Course
两个数据库
以上为博主个人学习总结,如有错误,欢迎指点,不胜感激。