sql server中的角色
- 格式:doc
- 大小:435.00 KB
- 文档页数:70
sql server结构描述(实用版)目录1.SQL Server 简介2.SQL Server 结构组成部分3.SQL Server 结构描述详解4.SQL Server 的优点正文【1.SQL Server 简介】SQL Server 是由微软公司开发的一款关系型数据库管理系统,它主要用于存储和管理大量数据。
SQL Server 可以运行在 Windows 操作系统上,并支持多种编程语言进行开发和连接,如 C#、Java 等。
其数据查询语言采用 SQL(结构化查询语言),具有简单易学、功能强大的特点。
【2.SQL Server 结构组成部分】SQL Server 的结构主要包括以下几个部分:1.数据库:用于存储数据,可以理解为 SQL Server 中的文件系统。
2.数据表:数据库中的数据以表的形式存储,每个表由列和行组成,列定义了表中数据的类型,行则表示具体的数据记录。
3.索引:为了提高查询速度,可以在表上创建索引。
索引类似于书籍的目录,可以快速定位到需要的数据。
4.视图:视图是基于 SQL 查询的结果集,可以将多个表通过 SQL 查询组合成一个新的虚拟表。
5.存储过程:存储过程是一组预编译的 SQL 语句,用于执行特定的任务,如插入、更新、删除数据等。
6.触发器:触发器是一种在对表执行某些操作(如插入、更新、删除)时自动执行的存储过程。
7.用户和权限:SQL Server 中可以创建不同权限的用户,用于管理和操作数据库。
【3.SQL Server 结构描述详解】1.数据库:SQL Server 中最基本的结构单位是数据库,它可以理解为一个容器,用于存储数据。
每个数据库都有一个唯一的名称,可以包含多个数据表、视图、存储过程等对象。
2.数据表:数据表是数据库中的核心结构,用于存储数据。
每个数据表都有一个唯一的名称,以及一定数量的列和行。
列定义了数据表中数据的类型和约束,行表示具体的数据记录。
sqlserver数据库表结构SQL Server数据库表结构详解一、用户表(user)用户表是一个常见的数据库表结构,用于存储系统中的用户信息。
该表通常包含以下字段:1. 用户ID(user_id):用于唯一标识每个用户的ID,通常为自增长的整数类型。
2. 用户名(username):用户的登录名,通常为字符串类型,长度限制根据具体需求而定。
3. 密码(password):用户的登录密码,通常为加密后的字符串类型。
4. 姓名(name):用户的真实姓名,通常为字符串类型。
5. 性别(gender):用户的性别,通常为枚举类型,如男、女等。
6. 手机号(phone):用户的手机号码,通常为字符串类型,长度限制根据具体需求而定。
7. 邮箱(email):用户的电子邮箱地址,通常为字符串类型,长度限制根据具体需求而定。
二、订单表(order)订单表用于存储用户的订单信息,包含以下字段:1. 订单ID(order_id):用于唯一标识每个订单的ID,通常为自增长的整数类型。
2. 用户ID(user_id):关联用户表的用户ID,表示该订单属于哪个用户。
3. 订单编号(order_number):订单的编号,通常为字符串类型,长度限制根据具体需求而定。
4. 下单时间(create_time):订单的创建时间,通常为日期时间类型。
5. 订单金额(amount):订单的总金额,通常为浮点数类型,表示订单应付的金额。
6. 支付状态(payment_status):订单的支付状态,通常为枚举类型,如未支付、已支付等。
三、商品表(product)商品表用于存储系统中的商品信息,包含以下字段:1. 商品ID(product_id):用于唯一标识每个商品的ID,通常为自增长的整数类型。
2. 商品名称(product_name):商品的名称,通常为字符串类型,长度限制根据具体需求而定。
3. 商品价格(price):商品的价格,通常为浮点数类型,表示商品的单价。
本文由我司收集整编,推荐下载,如有疑问,请与我司联系SQLServer新增用户,角色设置,权限管理2013/02/28 1 SQLServer2000新增用户,角色设置,权限管理等服务器角色是服务器级别的,由SQL server在安装过程中定义,属于固定角色,一共8个。
用户不能定义服务器角色,但是可以在这些角色中添加用户以获得相关权限。
重要身为BUILTINAdministrators 组成员的Windows NT 4.0 或Windows 2000 用户自动成为sysadmin 固定服务器角色成员。
下表描述固定服务器角色。
固定服务器角色描述sysadmin 在SQL Server 中进行任何活动。
该角色的权限跨越所有其它固定服务器角色。
serveradmin 配置服务器范围的设置。
setupadmin 添加和删除链接服务器,并执行某些系统存储过程(如sp_serveroption)。
securityadmin 管理服务器登录。
processadmin 管理在SQL Server 实例中运行的进程。
dbcreator 创建和改变数据库。
diskadmin 管理磁盘文件。
bulkadmin 执行BULK INSERT 语句。
--下面的示例将Windows NT 用户CorporateHelenS 添加到sysadmin 固定服务器角色中。
--T-SQL demo EXEC sp_addsrvrolemember ’’CorporateHelenS’’, ’’sysadmin’’对sysadmin 角色成员以外的所有用户,securityadmin 具有执行sp_password 存储过程的权限。
bulkadmin 固定服务器角色具有执行BULK INSERT 语句的权限。
与所有指定固定服务器角色成员一样,bulkadmin 角色成员也可以将其它登录添加到角色。
但是,由于与执行BULK INSERT 语句相关联的安全含义(BULK INSERT 语句要求对运行服务器的网络和计算机上的任何数据具有读权限),bulkadmin 角色成员授予其它角色成员权限可能并不理想。
SQL Server服务器角色共分为七种,下面就为您介绍SQL Server服务器角色的定义和权限,希望可以让您对SQL Server服务器角色有更深的认识。
SQL Server服务器角色是指根据SQL Server的管理任务,以及这些任务相对的重要性等级来把具有SQL Server管理职能的用户划分为不同的用户组,每一组所具有的管理SQL Server的权限都是系统内置的,即不能对其进行添加、修改和删除,只能向其中加入用户或者其他角色。
SQL Server服务器角色存在于各个数据库之中,要想加入用户,该用户必须有登录帐号以便加入到角色中。
SQL Server提供了七种常用的固定SQL Server服务器角色,其具体含义如下:系统管理员(sysadmin):拥有SQL Server所有的权限许可;
服务器管理员(serveradmin):管理SQL Server服务器端的设置;
磁盘管理员(diskadmin):管理磁盘文件;
进程管理员(processadmin):管理SQL Server系统进程;
安全管理员(securityadmin):管理和审核SQL Server系统登录;
安装管理员(setupadmin):增加、删除连接服务器,建立数据库复制以及管理扩展存储过程;
数据库创建者(dbcreator):创建数据库,并对数据库进行修改。
SQLServer的用户及权限SQL Server的用户及权限SQL Server的用户及权限Sybase中的用户分为两种:SQL服务器用户(登录帐号)和数据库用户。
安装完SQL服务器后,系统自动建立一个SQL服务器用户sa,口令为空,即系统管理员,他对整个系统有操作权,其他用户均由系统管理员建立。
在SQL Server中有三种特殊的用户:系统管理员、用户数据库所有者(建立相应数据库的数据库用户)DBO、一般用户。
系统管理员对整个系统有操作权;用户数据库所有者对他所建立的数据库具有全部操作权利;一般用户对给定的数据库只有被授权的操作权限。
数据库用户一般可分为用户组,任一数据库在建立后即被赋予一个用户组public。
1、建立SQL服务器用户名(登录帐号)作为一个用户,为了使用SQL Server,他必须在SQL Server上有一个SQL服务器用户名(登录帐号)。
这个帐号是系统管理员通过sp_addlogin来增加的。
sp_addlogin 登录名,口令,库名,语言,全名例:建立用户zhang, 口令为zhangling(最低六位),全名为Zhang ling1> sp_addlogin zhang,zhangling,null,null,Zhang ling2> go3> select * from syslogins4> go2、增加数据库用户名同样,为了使用SQL Server上的数据库,他必须在数据库中有一个用户名,这个用户名是数据库所有者通过sp_adduser来增加的。
数据库用户名不必和用户帐户一样,而且在不同的数据库中用户名可以不同。
多个用户可以有相同的SQL Server帐户。
同样,多个SQL Server帐户可以有相同的数据库名。
sp_adduser 登录名,别名,组名登录名为用户的SQL服务器登录名;别名为用户在数据库中的用户名;组名为用户所属的数据库用户组。
SQLServer中服务器角色和数据库角色权限详解SQL Server中服务器角色和数据库角色权限详解在SQL Server中,角色是一种组织和管理权限的方式。
服务器角色和数据库角色是在SQL Server中定义的两种不同类型的角色。
本文将对SQL Server中的服务器角色和数据库角色的权限进行详细解析。
一、服务器角色权限在SQL Server中,服务器角色是用于管理整个SQL Server实例的一组权限。
它们决定了对于整个服务器来说,特定的用户或者登录名可以执行哪些操作。
下面是SQL Server中常见的服务器角色及其权限的详细解析:1. 系统管理员(sysadmin):该角色具有最高权限,可以执行服务器上的所有操作,包括创建、修改和删除数据库,管理登录名和其他角色等。
2. 安全管理员(securityadmin):该角色负责管理服务器安全相关的操作,例如创建和管理登录名、数据库用户、角色成员等。
3. 数据库管理员(dbcreator):该角色可以创建、修改和删除数据库,但不能执行服务器级别的操作。
4. 服务器操作员(serveroperator):该角色负责管理服务器操作,例如启动、停止和暂停服务器,以及监视服务器所有进程。
5. 备份操作员(backupoperator):该角色可以备份和还原数据库。
6. 数据库还原操作员(dbdatareader、dbdatawriter):dbdatareader 角色允许成员读取数据库中的数据,dbdatawriter角色允许成员向数据库中写入数据。
7. 登录名-服务器角色映射:SQL Server还支持将登录名直接映射到服务器角色,从而给予其对应的权限。
二、数据库角色权限数据库角色是在SQL Server数据库级别定义的一组权限。
它们决定了对于具体数据库来说,特定的用户或者登录名可以执行哪些操作。
下面是SQL Server中常见的数据库角色及其权限的详细解析:1. 数据库所有者(db_owner):该角色具有对于数据库中的所有对象具有完全控制权,可以执行所有操作。
在SQLServer中创建⽤户⾓⾊及授权(使⽤SQL语句)1. ⾸先在 SQL Server 服务器级别,创建登陆帐户(create login)--创建登陆帐户(create login)create login dba with password='abcd1234@', default_database=mydb登陆帐户名为:“dba”,登陆密码:abcd1234@”,默认连接到的数据库:“mydb”。
这时候,dba 帐户就可以连接到 SQL Server 服务器上了。
但是此时还不能访问数据库中的对象(严格的说,此时 dba 帐户默认是 guest 数据库⽤户⾝份,可以访问 guest 能够访问的数据库对象)。
要使 dba 帐户能够在 mydb 数据库中访问⾃⼰需要的对象,需要在数据库 mydb 中建⽴⼀个“数据库⽤户”,赋予这个“数据库⽤户” 某些访问权限,并且把登陆帐户“dba” 和这个“数据库⽤户” 映射起来。
习惯上,“数据库⽤户” 的名字和 “登陆帐户”的名字相同,即:“dba”。
创建“数据库⽤户”和建⽴映射关系只需要⼀步即可完成:2. 创建数据库⽤户(create user):--为登陆账户创建数据库⽤户(create user),在mydb数据库中的security中的user下可以找到新创建的dbacreate user dba for login dba with default_schema=dbo并指定数据库⽤户“dba” 的默认 schema 是“dbo”。
这意味着⽤户“dba” 在执⾏“select * from t”,实际上执⾏的是 “select * from dbo.t”。
3. 通过加⼊数据库⾓⾊,赋予数据库⽤户“dba”权限:--通过加⼊数据库⾓⾊,赋予数据库⽤户“db_owner”权限exec sp_addrolemember 'db_owner', 'dba'此时,dba 就可以全权管理数据库 mydb 中的对象了。
SQL Server中关于数据库权限的分类数据库权限是指在SQL Server中对数据库对象进行操作的权限。
通过授予或撤销不同级别的数据库权限,可以实现对数据库的访问和管理的控制。
SQL Server中提供了多种类型的数据库权限,可以根据需求进行灵活配置。
本文将详细介绍SQL Server中关于数据库权限的分类。
1. 登录权限登录权限是指用户登录到SQL Server实例的权限。
登录权限包括以下几种:•sysadmin:具有系统管理员角色,拥有最高级别的访问和管理权力。
•serveradmin:具有服务器管理员角色,负责管理服务器级别配置和安全性。
•securityadmin:具有安全管理员角色,可以创建、更改和删除登录、用户和角色。
•processadmin:具有进程管理员角色,可以监视和终止服务器进程。
•setupadmin:具有安装程序管理员角色,可以管理服务器上安装的组件。
•bulkadmin:具有批量操作管理员角色,可以执行BULK INSERT操作。
2. 数据库级别权限数据库级别权限是指对特定数据库进行操作的权限。
常见的数据库级别权限包括:•db_owner:拥有该角色的用户对数据库具有完全控制权,包括创建、修改、删除对象以及对所有数据进行操作。
•db_datareader:允许用户读取数据库中的所有数据。
•db_datawriter:允许用户向数据库中写入数据。
•db_ddladmin:允许用户创建、修改和删除数据库对象,如表、视图、存储过程等。
•db_securityadmin:允许用户管理数据库角色、权限和安全性设置。
3. 对象级别权限对象级别权限是指对特定数据库对象进行操作的权限。
常见的对象级别权限包括:•SELECT:允许用户查询表中的数据。
•INSERT:允许用户向表中插入数据。
•UPDATE:允许用户更新表中的数据。
•DELETE:允许用户删除表中的数据。
•EXECUTE:允许用户执行存储过程或函数。
⾓⾊与权限(SQLServer数据库表)创建⾓⾊与权限要⽤到五张数据库表:1,⽤户信息表create table employee(userid varchar(50) not null, --⽤户IDusername varchar(100), --⽤户名userpassword varchar(100), --密码........)alter table employee --主键add constraint pk_employee_userid primary key (userid)2,⾓⾊表create table role(roleid varchar(50) not null, --⾓⾊Idrolename varchar(100), --⾓⾊名称)alter table tole --主键add constraint pk_role_roleid primary key (roleid)3,权限表create table popedom(popedomid int identity(1,1) not null, --权限Idpopedomname varchar(100), --权限名称popedomfatherid int, --权限⽗IDpopedomurl varchar(100) --树的连接路径....)er table popedom --主键add constraint PK_popedom primary key (popedomid)添加数据如insert into popedom values('我的办公桌',0,'')insert into popedom values('电⼦邮箱',1,'../mail/EmaiolManage.aspx')(添加数据的原则是⼀级接点的popedomfatherid 为0,如果是(我的办公桌)下⾯的接点,它们的popedomfatherid为(我的办公桌)的主键) 4,⽤户与⾓⾊关系表create table user_role(connectionid int identity(1,1) not null, --关系IDuserid varchar(50) not null, --管理员表IDroleid varchar(50) not null --⾓⾊Id)alter table user_role --主键add constraint PK_admin_role primary key(connectionid)5,⾓⾊与权限关系表create table role_popedom --⾓⾊与权限表(connectionid int identity(1,1), --关系Idroleid varchar(50) not null, --⾓⾊IDpopedomid int not null, --权限Idpopedom int --权限(1为可⽤,2为不可⽤))alter table role_popedom --主键add constraint PK_role_popedom primary key(connectionid) --主键。
sqlserver 对象名在SQL Server 中,"对象名" 通常指的是数据库中的各种实体,这些实体用于存储、管理和检索数据。
以下是一些常见的SQL Server 对象及其名称:1. 数据库(Databases)这些是SQL Server 实例中的独立数据集合。
每个数据库都有自己的系统表和用户表,以及其他对象。
2. 表(Tables)表是数据库中用于存储数据的结构。
它们由行和列组成。
3. 视图(Views)视图是基于一个或多个表的虚拟表。
它们不存储数据,而是显示来自基础表的数据。
4. 索引(Indexes)索引是用于加快数据检索速度的数据结构。
它们可以基于表的一列或多列。
5. 存储过程(Stored Procedures)存储过程是预编译的SQL 代码,可以在数据库中保存并多次调用。
6. 函数(Functions)函数是执行特定任务并返回值的预编译代码块。
SQL Server 提供了多种内置函数,也支持用户定义函数。
7. 触发器(Triggers)触发器是自动执行的特殊类型的存储过程,当满足特定条件(例如,插入、更新或删除操作)时,它们会自动执行。
8. 约束(Constraints)约束是用于确保数据库表中的数据完整性的规则。
例如,主键约束、外键约束、唯一约束等。
9. 序列(Sequences)序列是用于生成唯一数值的数据库对象。
这些数值通常用于为表的主键列生成唯一标识符。
10. 用户(Users)在SQL Server 中,用户是具有登录权限和特定数据库角色的安全主体。
11. 角色(Roles)角色是用于管理数据库权限的集合。
通过将用户分配到特定角色,可以更轻松地控制其对数据库的访问。
12. 类型(Types)类型定义了可以存储在数据库列中的数据种类。
SQL Server 支持多种数据类型,包括整数、浮点数、字符、日期等。
13. 分区(Partitions)分区是将表或索引的数据分成更小、更易于管理的片段的过程。
Microsoft SQL Server 2005初学者指南第6章复杂查询本章主要内容:连接运算符相关联子查询连接查询和子查询的优点常见的表表达式本章将介绍SELECT语句中更为复杂的特性。
这里将把注意力主要集中在使用多个表进行查询并检索结果。
本章将介绍对于关系型DBMS来说最重要的运算符——连接运算符,除了介绍该运算符的所有形式之外,本章还讨论了相关子查询以及EXIXTS函数。
6.1 连接运算符第5章举例介绍了如何使用SELECT从一个数据库或一个表中查询行的情况。
如果T ran sact-SQL语言只支持这种简单的SELECT语句,那么从两个或多个表的连接中检索数据将是不可能的。
结果就是,数据库中所有的数据都必须存储在一个表中。
尽管把数据库中所有的数据都保存在一个表上是可行的,但是这样做有一个很大的弊端——存储的数据将是高度冗余的。
Transact-SQL提供了连接运算符,从而允许从多个表中检索数据。
因为连接运算符允许数据分布在多个表中,并且实现了数据库系统中一个至关重要的特性——没有冗余的数据,所以这个运算符可能是关系数据库系统中最重要的运算符。
注意:第5章介绍了UNION运算符,该运算符也可以将两个或多个表连接在一起。
然而,UNION运算符总是要连接两个或多个SELECT语句,而连接运算符只需使用一句SELECT语句就可以把两个或多个表“连接”在一起。
而且,UNION运算符把表中的行连接起来;正如在本章后面可以看到的,连接运算符把表的列“连接”在一起。
JOIN运算符适用于基表和视图。
本章将讨论基表之间的连接,而关于视图的连接将在第10章中介绍。
两个表之间可以用(至少)5种不同的方式进行连接:使用等值连接使用笛卡尔积连接(即交叉连接)使用自然连接使用theta连接使用外部连接6.1.1 两种实现连接的语法格式要想连接两个或多个表,可以使用两种不同的语法格式:ANSI连接语法SQL Server连接语法ANSI连接语法是在SQL 92标准中引入的,并在其中对该语法作了显式的定义——也就是对每种类型的连接运算都使用了相应的名称。
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>>服务器⾓⾊不容许更改>>登录后也不⼀定有权限操作数据库3.数据库级别⽤户:指有权限能操作数据库的⽤户;⽤户具体位置在数据库——>某个具体库——>安全性——>⽤户数据库⾓⾊:SQL Server 中有两种类型的数据库级⾓⾊:数据库中预定义的“固定数据库⾓⾊”和您可以创建的“灵活数据库⾓⾊”固定的有某些权限的数据库⾓⾊,所有数据库中都有这些⾓⾊,默认有10个,分别如下;public--public ⾓⾊是⼀个特殊的数据库⾓⾊,每个数据库⽤户都属于它。
当几个用户需要在某个特定的数据库中执行类似的动作时(这里没有相应的Windows用户组),就可以向该数据库中添加一个角色(role)。
数据库角色指定了可以访问相同数据库对象的一组数据库用户。
数据库角色的成员可以分为如下几类:Windows用户组或用户账户SQL Server登录其他角色SQL Server的安全体系结构中包括了几个含有特定隐含权限的角色。
除了数据库拥有者创建的角色之外,还有两类预定义的角色。
这些可以创建的角色可以分为如下几类:固定服务器固定数据库用户自定义12.4.1 固定服务器由于固定服务器是在服务器层次上定义的,因此它们位于从属于数据库服务器的数据库外面。
表12-1列出了所有现有的固定服务器角色。
表12-1 固定服务器角色下面两个系统过程用来添加或删除固定服务器角色成员:sp_addsrvrolemembersp_dropsrvrolemember注意:您不能添加、修改或删除固定服务器角色。
另外,只有固定服务器角色的成员才能执行上述两个系统过程来从角色中添加或删除登录账户。
sa登录sa登录是系统管理员的登录。
在以前的SQL Server版本中不存在角色,sa登录具有所有可能的关于系统管理工作的权限。
在SQL Server 2005中,sa登录保持了向后兼容性。
sa登录永远是固定服务器角色syadmin中的成员,并且不能从该角色中删除。
注意:只有当没有其他方法登录到SQL Server系统中时,再使用sa登录。
12.4.2 固定服务器角色及其权限在某个SQL Server系统中,每个固定服务器角色都有其隐含的权限。
使用系统过程sp_srvrolepermission可以浏览每个固定服务器角色的权限。
该系统过程的语法形式为:sp_srvrolepermission[[@srvrolename =] 'role']如果没有指定role的值,那么所有的固定服务器角色的权限都将显示出来。
sqlserver中利⽤sql语句如何创建⾓⾊和⽤户/*--⽰例说明⽰例在数据库pubs中创建⼀个拥有表jobs的所有权限、拥有表titles的SELECT权限的⾓⾊r_test随后创建了⼀个登录l_test,然后在数据库pubs中为登录l_test创建了⽤户账户u_test同时将⽤户账户u_test添加到⾓⾊r_test中,使其通过权限继承获取了与⾓⾊r_test⼀样的权限最后使⽤DENY语句拒绝了⽤户账户u_test对表titles的SELECT权限。
经过这样的处理,使⽤l_test登录SQL Server实例后,它只具有表jobs的所有权限。
--*/USE pubs--创建⾓⾊ r_testEXEC sp_addrole 'r_test'--授予 r_test 对 jobs 表的所有权限GRANT ALL ON jobs TO r_test--授予⾓⾊ r_test 对 titles 表的 SELECT 权限GRANT SELECT ON titles TO r_test--添加登录 l_test,设置密码为pwd,默认数据库为pubsEXEC sp_addlogin 'l_test','pwd','pubs'--为登录 l_test 在数据库 pubs 中添加安全账户 u_testEXEC sp_grantdbaccess 'l_test','u_test'--添加 u_test 为⾓⾊ r_test 的成员EXEC sp_addrolemember 'r_test','u_test'--拒绝安全账户 u_test 对 titles 表的 SELECT 权限DENY SELECT ON titles TO u_test/*--完成上述步骤后,⽤ l_test 登录,可以对jobs表进⾏所有操作,但⽆法对titles表查询,虽然⾓⾊ r_test 有titles表的select权限,但已经在安全账户中明确拒绝了对titles的select权限,所以l_test⽆titles表的select权限--*/--从数据库 pubs 中删除安全账户EXEC sp_revokedbaccess 'u_test'--删除登录 l_testEXEC sp_droplogin 'l_test'--删除⾓⾊ r_testEXEC sp_droprole 'r_test'SQL code--1. 创建⽰例环境。
⼀⽂看懂SQLServer数据库⾓⾊与权限管理概述⽼系统还有10⼏台sqlserver数据库,最近需要对这些sqlserver的权限⽅⾯做⼀些梳理,这⾥先简单介绍下sqlserver⾓⾊与权限管理⽅⾯的内容。
sqlserver安全实现策略安全性是所有数据库管理系统的⼀个重要特征。
理解安全性问题是理解数据库管理系统安全性机制的前提。
1、当⽤户登录数据库系统时,如何确保只有合法的⽤户才能登录到系统中?这是⼀个最基本的安全性问题,也是数据库管理系统提供的基本功能。
在Microsoft SQL Server 2008系统中,通过⾝份验证模式和主体解决这个问题。
1)⾝份验证模式Microsoft SQL Server 2008系统提供了两种⾝份验证模式:Windows⾝份验证模式和混合模式。
Windows⾝份验证模式:在该模式中,⽤户通过Windows⽤户账户连接SQL Server时,使⽤Windows操作系统中的账户名和密码。
混合模式:在混合模式中,当客户端连接到服务器时,既可能采取Windows⾝份验证,也可能采取SQL Server⾝份验证。
主体是可以请求系统资源的个体或组合过程。
例如,数据库⽤户是⼀种主体,可以按照⾃⼰的权限在数据库中执⾏操作和使⽤相应的数据。
2)主体主体是可以请求系统资源的个体或组合过程。
例如,数据库⽤户是⼀种主体,可以按照⾃⼰的权限在数据库中执⾏操作和使⽤相应的数据。
Microsoft SQL Server 2008系统有多种不同的主体,不同主体之间的关系是典型的层次结构关系,位于不同层次上的主体其在系统中影响的范围也不同。
位于层次⽐较⾼的主体,其作⽤范围⽐较⼤;位于层次⽐较低的主体,其作⽤范围⽐较⼩。
2、当⽤户登录到系统中,可以执⾏哪些操作、使⽤哪些对象和资源?在Microsoft SQL Server 2008系统中,通过安全对象和权限设置来解决这个问题。
3、数据库中的对象由谁所有?如果是由⽤户所有,那么当⽤户被删除时,其所拥有的对象怎么办,难道数据库对象可以成为没有所有者的“孤⼉”吗?在Microsoft SQL Server 2008系统中,这个问题是通过⽤户和架构分离来解决的。
Microsoft SQL Server 2005初学者指南第6章复杂查询本章主要内容:连接运算符相关联子查询连接查询和子查询的优点常见的表表达式本章将介绍SELECT语句中更为复杂的特性。
这里将把注意力主要集中在使用多个表进行查询并检索结果。
本章将介绍对于关系型DBMS来说最重要的运算符——连接运算符,除了介绍该运算符的所有形式之外,本章还讨论了相关子查询以及EXIXTS函数。
6.1 连接运算符第5章举例介绍了如何使用SELECT从一个数据库或一个表中查询行的情况。
如果T ran sact-SQL语言只支持这种简单的SELECT语句,那么从两个或多个表的连接中检索数据将是不可能的。
结果就是,数据库中所有的数据都必须存储在一个表中。
尽管把数据库中所有的数据都保存在一个表上是可行的,但是这样做有一个很大的弊端——存储的数据将是高度冗余的。
Transact-SQL提供了连接运算符,从而允许从多个表中检索数据。
因为连接运算符允许数据分布在多个表中,并且实现了数据库系统中一个至关重要的特性——没有冗余的数据,所以这个运算符可能是关系数据库系统中最重要的运算符。
注意:第5章介绍了UNION运算符,该运算符也可以将两个或多个表连接在一起。
然而,UNION运算符总是要连接两个或多个SELECT语句,而连接运算符只需使用一句SELECT语句就可以把两个或多个表“连接”在一起。
而且,UNION运算符把表中的行连接起来;正如在本章后面可以看到的,连接运算符把表的列“连接”在一起。
JOIN运算符适用于基表和视图。
本章将讨论基表之间的连接,而关于视图的连接将在第10章中介绍。
两个表之间可以用(至少)5种不同的方式进行连接:使用等值连接使用笛卡尔积连接(即交叉连接)使用自然连接使用theta连接使用外部连接6.1.1 两种实现连接的语法格式要想连接两个或多个表,可以使用两种不同的语法格式:ANSI连接语法SQL Server连接语法ANSI连接语法是在SQL 92标准中引入的,并在其中对该语法作了显式的定义——也就是对每种类型的连接运算都使用了相应的名称。
这个语法增强了查询的可读性;因此,推荐使用该语法。
与通过WHERE子句隐式地表示连接关系不同,新的连接关键字则在FROM子句中显式地指定连接关系。
与显式地定义连接有关的关键字有:CROSS JOIN[INNER] JOINLEFT [OUTER] JOINRIGHT [OUTER] JOINFULL [OUTER] JOINCROSS JOIN指出在两个表之间做笛卡尔积的运算。
INNER JOIN定义了两个表之间的自然连接,而LEFT [OUTER] JOIN和RIGHT [OUTER] JOIN则分别定义了与其名称相同的连接操作。
最后一个FULL [OUTER] JOIN指定右外部连接和左外部连接的并。
(所有这些不同的连接运算将在本章后面的部分中进一步解释。
)SQL Server连接语法是“老式”语法,也就是说每个连接运算都使用所谓的连接列进行隐式地定义。
本章中每个与连接运算有关的示例都使用了两种语法格式进行求解:首先使用A NSI连接语法进行求解,随后使用了等效的SQL Server连接语法。
对应的连接列的语义必须是相同的。
也就是说两列必须具有相同的逻辑意义。
尽管常常要求对应的连接列应该有相同的名称,但是这一要求并不是必需的。
注意:对于数据库系统来说,检查某列的逻辑意义是不可能的。
(比如,尽管项目编号和员工编号都定义为整型,但是两者没有共同点。
)因此,数据库系统只能检查数据类型以及串数据类型的长度。
SQL Server要求相应的连接列必须有可以互相兼容的数据类型,例如INT和SMALLINT。
(声明相应的连接列最好的方法是使用别名数据类型。
) 示例数据库中含有3对列,每对中的两列都有着相同的逻辑意义(而且,很自然它们也有相同的名称)。
表employee和表department可以通过employee.dept_no列和department. dept_no列连接起来。
表employee和表works_on之间的连接列是employee.dept_no列和w orks.emp_no列。
最后,使用连接列projec. projec_no和works_on. projec_no可以把表proj ect和表works_on连接起来。
可以对SELECT语句中列的名称进行限定。
“限定”某列的名称意味着:为了避免发生关于“列属于哪个表”这样可能的有歧义的情况,必须把表的名称(或表的别名)放在列的名称之前,并用句点隔开:如table_name.column_name。
在大多数SELECT语句中,为了增加可读性,一般推荐使用限定名,但是并不一定需要对列的名称进行限定。
如果在SELECT语句中的列名是有歧义的(如示例6.1中的employee.d ept_no列和department.dept_no列),那么必须对列使用限定名。
在使用了连接的SELECT语句中,WHERE子句可以包含包括连接条件在内的其他条件(参见示例6.2)。
示例6.2获取为项目Gemini工作的所有员工的全部详细信息。
ANSI连接语法:USE sampleSELECT*FROM works_on JOIN projectON project.project_no = works_on.project_noWHERE project_name = 'Gemini'28559注意:因为示例6.2中的project_name没有歧义,所以对它的限定并不是必需的。
6.1.3 笛卡尔积前一节介绍了建立等值连接的一个可行的方法。
在该过程的第一步中,employee表中的每一行都和department表中的每一行组合在一起。
这一中间结果通过笛卡尔积操作得到。
示例6.3ANSI连接语法:USE sampleSELECT*FROM employee CROSS JOIN departmentSQL Server连接语法:USE sampleSELECT*FROM employee, department示例6.3的结果显示在表6-1中。
笛卡尔积是把第一个表的每一行与第二个表的每一行组合在一起。
通常,一个n行的表和一个m行的表在进行笛卡尔积运算后,将产生一个n 乘以m行的(或n*m)的结果。
因此,示例6.3中的结果集有7*3=21行。
注意:SELECT * FROM table1,table2和SELECT table1.*,table2.* FROM table1,table2表示法是等效的。
在这种情况下,*号表示FROM子句中所有表中的所有列。
注意:自然连接是所有连接运算中最有用的格式。
因此,除非特别指明,否则术语连接一般都是指自然连接运算。
自然连接的SELECT列表中不必包含两个表中所有不同的列(它只是不包括冗余的连接列)。
示例6.6说明了这一点。
示例6.6获取于1998年10月15日加入项目的所有员工所在部门的编号。
ANSI连接语法:USE sampleSELECT dept_noFROM employee JOIN works_onON employee.emp_no = works_on.emp_noWHERE enter_date = '10.15.1998'SQL Server连接语法:USE sampleSELECT dept_noFROM employee,works_onWHERE employee.emp_no = works_on.emp_noAND enter_date = '10.15.1998'结果如表6-6所示:表6-6dept_nod2注意:一般来说,SELECT语句中连接的表最多为8~10个。
如果想要在一句SELECT语句中连接10个以上的表,那么数据库的设计可能不是最优的。
下面的示例显示了部门所在地是Seattle的所有分析员(analyst)的名和姓。
示例6.8ANSI连接语法:USE sampleSELECT emp_fname,emp_lnameFROM works_onJOIN employee ON works_on.emp_no=employee.emp_noJOIN department ON employee.dept_no=department.dept_no AND location = 'Seattle'AND job = 'analyst'SQL Server连接语法:USE sampleSELECT emp_fname,emp_lnameFROM works_on,employee,departmentWHERE works_on.emp_no = employee.emp_noAND employee.dept_no = department.dept_noAND job = 'analyst'AND location = 'Seattle'结果如表6-8所示:表6-8emp_fname emp_lnameElke Hansel只有把至少3个表(works_on、employee以及department)连接在一起,才可能得到示例6.8中的结果。
可以使用两对连接列把这些表连接在一起:(works_on.emp_no,employee.emp_no)(employee.dept_no,department.dept_no)示例6.9使用了来自示例数据库的4个表。
示例6.9获取Accounting部门中员工所从事的项目的名称(已消除冗余重复的数据)。
ANSI连接语法:USE sampleSELECT DISTINCT project_nameFROM project JOIN works_onON project.project_no = works_on.project_noJOIN employee ON works_on.emp_no = employee.emp_noJOIN department ON employee.dept_no = department.dept_no WHERE dept_name = 'Accounting'SQL Server连接语法:USE sampleSELECT DISTINCT project_nameFROM project,works_on,employee,departmentWHERE project.project_no = works_on.project_noAND works_on.emp_no = employee.emp_noAND employee.dept_no = department.dept_noAND dept_name = 'Accounting'结果如表6-9所示:表6-9project_nameApolloGeminiMercury注意,在连接3个表的时候,使用了两个连接条件(每个条件都联系到两个表)来取得一个自然连接。