SQL数据库安全控制

一.数据库登录名,用户名之间的联系和操作

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

   两个数据库


  以上为博主个人学习总结,如有错误,欢迎指点,不胜感激。

猜你喜欢

转载自blog.csdn.net/sirius_hly/article/details/80412955