数据库的安全性

服务器登录名,指有权限登录到某服务器的用户;

服务器角色,指一组固定的服务器用户,默认有9组;

  • 登录名一定属于某些角色,默认为public
  • 服务器角色不容许更改
  • 登录后也不一定有权限操作数据库

数据库用户,指有权限能操作数据库的用户;

数据库角色,指一组固定的有某些权限的数据库角色;

数据库架构,指数据库对象的容器;类似于数据库对象的命名空间,用户通过架构访问数据库对象。

通过下图可以让这些概念清晰一些:

  1. 服务器登录名属于某组服务器角色;
  2. 服务器登录名需要于数据库的用户映射后才拥有操作数据库的权限
  3. 数据库用户属于某组数据库角色以获取操作数据库的权限
  4. 数据库角色拥有对应的数据库架构,数据库用户可以通过角色直接拥有架构
  5. 数据库用户有默认架构,写SQL语句可以直接以“对象名”访问
  6. 非默认架构则要以“架构名.对象名”访问

服务器级别角色

为便于管理服务器上的权限,SQL Server 提供了若干“角色”,这些角色是用于分组其他主体的安全主体。“角色”类似于 MicrosoftWindows 操作系统中的“组”。

服务器级角色也称为“固定服务器角色”,因为您不能创建新的服务器级角色。服务器级角色的权限作用域为服务器范围。

从最高级别sysadmin到最低级别bulkadmin

    sysadmin            SystemAdministrators         可执行任何任务,适合DBA
     setupadmin           Setup Administrators         可执行管理(增加、删除、配置)链接服务器和控制启动的存储过程
    
     serveradmin    ServerAdministrators         可以更改服务器范围的配置选项和关闭服务器
     securityadmin    SecurityAdministrators       管理登录名及其属性。拥有grant\deny\revoke服务器级与数据库级权限
    public                                          每个登录名都属于public服务器角色。只有在希望所有用户都能使用对象时,
                                                     才在对象上分配public权限
     processadmin    ProcessAdministrators        通过执行多个进程做多件事件,例可生成一个进程向缓存写数据,同时生成一个                                                       进程向缓存读数据。该角色可结束进程。
     diskadmin           DiskAdministrators           管理磁盘文件,比如镜像数据库和添加备份设备
     dbcreator           DatabaseCreators            可以创建、更改、删除和还原任何数据库。适合DBA,也适合开发人员
     bulkadmin           Bulk InsertAdministrators    可运行bulk insert语句,允许从文本文件中将数据导入到数据库,适合需要执行                                                      大容量插入操作的用户

数据库级别角色(存在于每个数据库中,在创建数据库时,系统默认创建了10个固定数据库角色)
    db_owner           DBOwners                    可进行所有活动
    db_accessadmin    DB AccessAdministrators      可通过添加或者删除用户来指定谁可以访问数据库
    db_securityadmin    DB SecurityAdministrators    可以修改角色成员身份和管理权限
    db_ddladmin           DB DDLAdministrators         可运行任何数据定义语言DDL命令
    db_backupoperator    DB BackupOperator            可以备份数据库
    db_datareader    DB DataReader               可以读取所有用户表中的所有数据
    db_datawriter    DB DataWriter               可以在所有用户表中添加、删除、更改数据
    db_denydatareader    DB Deny DataReader           不能读取数据库内用户表中的数据,但可以执行架构修改(比如在表中添加列)
    db_denydatawriter    DB Deny DataWriter           不能添加、删除、修改数据库内用户表中的数据
   public                                           每个数据库用户都属于public数据库角色
  

数据库中有几个特殊的用户名(默认情况下,每个数据库都带有4个内置用户)

我们常见的dbo是指以sa(SQLSERVER登录方式)或windows   administration(Windows集成验证登录方式)登录的用户,也就是说数据库管理员在SQLSERVER中的用户名就叫dbo,而不叫 sa,这一点看起来有点蹊跷,因为通常用户名与登录名相同(不是强制相同,但为了一目了然通常都在创建用户名时使用与登录名相同的名字),例如创建了一个 登录,名称为me,那么可以为该登录名me在指定的数据库中添加一个同名用户,使登录名me能够访问该数据库中的数据.当在数据库中添加了一个用户me 后,之后以me登录名登录时在该数据库中创建的一切对象(表,函数,存储过程等)的所有者都为me,如 db.me.table1,db.me.fn_test(),而不是dbo.
不管怎样,只要记住了sa这个登录名对应的用户名是dbo而不是sa就行了. 

guest帐户是特殊的用户帐户。如果用户使用USE database语句访问的数据库中没有与此用户关联的帐户,此用户就与guest用户相关联。这个账户允许登录名没有映射到数据库用户的情况下访问数据库。默认情况下guest用户是不启用的。


由于过去经常混淆SQL Server中的用户名和登录名两个概念,现在简要介绍其区别:

登录名:服务器方的一个实体,使用一个登录名只能进入服务器,但是不能让用户访问服务器中的数据库资源。每个登录名的定义存放在master数据库的syslogins表中

用户名:一个或多个登录对象在数据库中的映射,可以对用户对象进行授权,以便为登录对象提供对数据库的访问权限。用户定义信息存放在每个数据库的sysusers表中。

SQLSERVER 把登录名与用户名的关系称为映射。用登录名登录SQLSERVER后,在访问各个数据库时,SQLSERVER会自动查询此数据库中是否存在与此登录名关联的用户名,若存在就使用此用户的权限访问此数据库,若不存在就是用guest用户访问此数据库。

一个登录名可以被授权访问多个数据库,但一个登录名在每个数据库中只能映射一次。即一个登录可对应多个用户,一个用户也可以被多个登录使用。好比 SQLSERVER就象一栋大楼,里面的每个房间都是一个数据库.登录名只是进入大楼的钥匙,而用户名则是进入房间的钥匙.一个登录名可以有多个房间的钥 匙,但一个登录名在一个房间只能拥有此房间的一把钥匙。

链接或登录SQL Server服务器时是用的登录名而非用户名登录的,程序里面的链接字符串中的用户名也是指登录名。

 

SQL Server数据库查看数据库用户权限

查看 SQL 2005 用户所属数据库角色

use yourdb  
    go  
    select DbRole = g.name, MemberName = u.name, MemberSID = u.sid  
    from sys.database_principals u, sys.database_principals g, sys.database_role_members m  
    where g.principal_id = m.role_principal_id  
    and u.principal_id = m.member_principal_id  
    order by 1, 2  
    go  

查看 SQL 2005 登陆帐户所属服务器角色

use master  
    go  
    select SrvRole = g.name, MemberName = u.name, MemberSID = u.sid  
    from sys.server_principals u, sys.server_principals g, sys.server_role_members m  
    where g.principal_id = m.role_principal_id  
    and u.principal_id = m.member_principal_id  
    order by 1, 2  
    go  

查看 SQL 2005 用户被赋予的权限

use yourdb  
    go  
    exec sp_helprotect @username = 'user name' 
    go  

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值