SQLServer⽤户和⾓⾊
1.在SQL Server中,⽤户和⾓⾊是分为服务器级别和数据库级别的
2.服务器级别
登录名:指有权限登录到某服务器的⽤户,例如超级管理员的登录名是sa;
登录名具体位置在数据库——>安全性——>登录名
服务器⾓⾊:为帮助您管理服务器上的权限,SQL Server 提供了若⼲⾓⾊,这些⾓⾊是⽤于对其他主体进⾏分组的安全主体。服务器级⾓⾊
的权限作⽤域为服务器范围。SQL Server 提供了九种固定服务器⾓⾊,⽆法更改授予固定服务器⾓⾊的权限,这9组⾓⾊分别如下:
sysadmin —— 在SQL Server中进⾏任何活动,该⾓⾊的权限跨越所有其它固定服务器⾓⾊
serveradmin —— 更改服务器范围内的配置选项并关闭服务器
setupadmin —— 添加和删除链接服务器,并执⾏某些系统存储过程(如 sp_serveroption)
securityadmin —— 授予数据库引擎的访问权限和配置⽤户权限的能⼒使得安全管理员可以分配⼤多数服务器权限,securityadmin ⾓⾊应视为与sysadmin ⾓⾊等效processadmin —— 管理在 SQL Server 实例中运⾏的进程
dbcreator —— 创建和改变数据库,但是没有读取权限
diskadmin —— 管理磁盘⽂件
bulkadmin —— 执⾏ BULK INSERT 语句
public —— 每个 SQL Server 登录名均属于 public 服务器⾓⾊。如果未向某个服务器主体授予或拒绝对某个安全对象的特定权
限,该⽤户将继承授予该对象的 public ⾓⾊的权限。当您希望该对象对所有⽤户可⽤时,只需对任何对象分配 public 权限即可。
您⽆法更改 public 中的成员关系。public 的实现⽅式与其他⾓⾊不同,但是,可以从 public 授予、拒绝或撤销权限。
服务器⾓⾊具体位置在数据库——>安全性——>服务器⾓⾊
注意:
>>登录名⼀定属于某些⾓⾊,默认为public
>>服务器⾓⾊不容许更改
>>登录后也不⼀定有权限操作数据库
sqlserver备份表语句3.数据库级别
⽤户:指有权限能操作数据库的⽤户;
⽤户具体位置在数据库——>某个具体库——>安全性——>⽤户
数据库⾓⾊:SQL Server 中有两种类型的数据库级⾓⾊:数据库中预定义的“固定数据库⾓⾊”和您可
以创建的“灵活数据库⾓⾊”固定的有某些权限的数据库⾓⾊,所有数据库中都有这些⾓⾊,默认有10个,分别如下;
public
--public ⾓⾊是⼀个特殊的数据库⾓⾊,每个数据库⽤户都属于它。public ⾓⾊:
>>捕获数据库中⽤户的所有默认权限。
>>⽆法将⽤户、组或⾓⾊指派给它,因为默认情况下它们即属于该⾓⾊。
>>包含在每个数据库中,包括 master、msdb、tempdb、model 和所有⽤户数据库。
>>⽆法除去。
db_owner
--进⾏所有数据库⾓⾊的活动,以及数据库中的其它维护和配置活动。
--该⾓⾊的权限跨越所有其它固定数据库⾓⾊。
db_accessadmin
--在数据库中添加或删除 Windows NT 4.0 或 Windows 2000 组和⽤户以及 SQL Server ⽤户。
db_datareader
--查看来⾃数据库中所有⽤户表的全部数据。
db_datawriter
--添加、更改或删除来⾃数据库中所有⽤户表的数据
db_ddladmin
--添加、修改或除去数据库中的对象(运⾏所有 DDL)
db_securityadmin
--管理 SQL Server 2000 数据库⾓⾊的⾓⾊和成员,并管理数据库中的语句和对象权限
db_backupoperator
--有备份数据库的权限
db_denydatareader
--拒绝选择数据库数据的权限
db_denydatawriter
--拒绝更改数据库数据的权限
数据库⾓⾊具体位置在数据库——>某个具体库——>安全性——>⾓⾊——>数据库⾓⾊
注意:请不要将灵活数据库⾓⾊添加为固定⾓⾊的成员,这会导致意外的权限升级。
架构:架构(Schema)是⼀组数据库对象的集合,它被单个负责⼈(可以是⽤户或⾓⾊)所拥有并构成唯⼀命名空间。可以将架
构看成是对象的容器。
>>数据库⽤户对应于服务器登录名以便登录者可以操作数据库
>>数据库⾓⾊可以添加,可以定制不同权限
>>数据库架构,类似于数据库对象的命名空间,⽤户通过架构访问数据库对象
架构数据库⾓⾊具体位置在数据库——>某个具体库——>安全性——>架构
4.数据库级别设置
服务器级 -> 数据库级 -> 架构级 - > 数据对象级,⽐如说:Server.DataBase1.dbo.Table1;这⾥的意思就是Table1这个表属于dbo这
个架构,dbo这个架构属于DataBase1这个数据库,DataBase1这个数据库属于Server这个服务器。⾥⾯的架构其实就是⼀个容器,好像
就是⾯向对象⾥⾯的命名空间,⼀个⽤户可以拥有多个架构,但是不能对没有拥有的架构进⾏操作。⼀个数据库⾓⾊,是对不同架构⾥
⾯数据对象的权限组织,也有可能涉及到多个架构,当某⼀个⽤户被转换成⼀种数据库⾓⾊的时候,假如这个⽤户本⾝不拥有某⼀个架
构⽽该数据库⾓⾊拥有,那它当它对那个架构进⾏操作的时候就会出错。
5.相互之间的关系
(1)登录名与数据库⽤户在服务器级别是⼀对多的,在数据库级别是⼀对⼀的
登录名可以理解为进⼊整个⼤楼的钥匙,⽤户名可以理解为⼀个房间的钥匙,这⾥所说的⼤楼就是sql server服务器,⽽房间就是
这个sql server服务器中的具体的库,要注意登录名是存在于master数据库的syslogins表中,⽤户名是在各个具体的库下建⽴的(也就
是要先进⼊各个库),最关键的是:⼀个登录名可以和多个不同库下的⽤户做映射,但是在同⼀个库下只能和⼀个⽤户做映射,并且⼀
个⽤户名可以和多个登录名有映射关系,真正有权限的是⽤户名,只不过是⽤登录名去登进数据库,然后去映射的⽤户名,这样就
有了相应的权限,刚开始建⽴的登录名只要把该登录名的服务器⾓⾊设置为Database Creator,就可以创建新的数据库了,并且新建⽴
的这个数据库中会⾃动⽣成两个⽤户名:dbo和guest。并且刚刚建⽴的登录名就和dbo映射了,还有就是rbo也和sa映射了,因为sa作为
管理员的登录名和每个库中的rbo⽤户映射。
(2)⼀个数据库⾓⾊有可能涉及多个架构,数据库⾓⾊对应的是权限
(3)⼀个⽤户对应⼀个数据库⾓⾊
(4)⼀个数据库⽤户可以对应多个架构(架构是表容器),架构⾥⾯包含的是数据库表。
6.⽤T_SQL创建⽤户和登录⽤户例⼦
-- 1.创建登录⽤户(在master库下⾯执⾏)
USE master
GO
CREATE LOGIN readonlylogin WITH password='';
-- 2.创建数据库只读⽤户(在某个⽤户数据库下⾯执⾏)
USE TestDB
GO
CREATE USER readonlyuser FROM LOGIN readonlylogin;
-
- 3.将⽤户加⼊数据库⾓⾊,例如所有者⾓⾊db_owner、只读⾓⾊db_datareader等(在某个⽤户数据库下⾯执⾏)
USE TestDB
GO
EXEC sp_addrolemember 'db_datareader', 'readonlyuser';
--EXEC sp_addrolemember 'db_owner', 'readonlyuser';----可以将⽤户关联到多个数据库⾓⾊中
--EXEC sp_droprolemember 'db_owner', 'readonlyuser'----从特定的数据⾓⾊中删除⽤户
-- 4.⽤我们刚刚创建的readonlylogin⽤户进⾏登录,登录时要注意将“选项(英⽂是Options)-->连接属性(Connection Properties)-->连接数据库(Connect to database)”改为我们的⽬标数据库例如TestDB下⾯
注意:
1.登录名和⽤户名可以起⼀样的名字;
2.如果是在普通的SQL Server中,就按上⾯操作即可,如果微软云Azure中的SQL Server,可能有些语句不能⽤,例如use master,default_schema=dbo等
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论