sqlserver 中的一些概念

来源:互联网 发布:ptc系列软件 编辑:程序博客网 时间:2024/05/22 14:14
 

以往 SQL Server 内的对象命名是“服务器.数据库.用户名.对象”,但新版的对象命名改为“服务器.数据库.Schema.对象”。这让你规划数据库对象命名时更有弹性。

    架构是形成单个命名空间的数据库实体的集合。命名空间是一个集合,其中每个元素的名称都是唯一的。

    虽然 SQL Server 2000 包含 CREATE SCHEMA 语句,但实际上并不会像上面所定义的那样创建架构。在 SQL Server 2000 中,数据库用户和架构是隐式连接在一起的。每个数据库用户都是与该用户同名的架构的所有者。对象的所有者在功能上与包含它的架构所有者相同。因而,SQL Server 2000 中的完全限定名称的“架构”也是数据库中的用户。因此,从 SQL Server 2000 数据库中删除用户之前,管理员需要删除该用户所拥有的所有对象或更改这些对象的所有者。以包含此对象的 SQL Server 2000 数据库为例:

    accounting.ap.george.reconciliation

    此对象的所有者为用户“george”。如果管理员需要删除用户“george”,则必须先删除此对象或更改此对象的所有者。在后一种情况下,可以按如下方式将其重命名:

    accounting.ap.sandra.reconciliation

    转让对象的所有权也会更改其完全限定名称。引用 accounting.ap.george.reconciliation 的任何代码必须经过更新以反映对名称所做的更改。

    在 SQL Server 2005 中,架构独立于创建它们的数据库用户而存在。可以在不更改架构名称的情况下转让架构的所有权。并且可以在架构中创建具有用户友好名称的对象,明确指示对象的功能。例如,除了 accounting.ap.sandra.reconciliation 外,您还可以创建名为 accounting.ap.invoice.reconciliation 的架构。因为“invoice”不是用户,所以从数据库中删除用户后,无需更改此名称。这就简化了数据库管理员和开发人员的工作。

用户架构分离的好处

将架构与数据库用户分离对管理员和开发人员而言有下列好处:

·    多个用户可以通过角色成员身份或 Windows 组成员身份拥有一个架构。这扩展了允许角色和组拥有对象的用户熟悉的功能。

·    极大地简化了删除数据库用户的操作。

·    删除数据库用户不需要重命名该用户架构所包含的对象。因而,在删除创建架构所含对象的用户后,不再需要修改和测试显式引用这些对象的应用程序。

·    多个用户可以共享一个默认架构以进行统一名称解析。

·    开发人员通过共享默认架构可以将共享对象存储在为特定应用程序专门创建的架构中,而不是 DBO 架构中。

·    可以用比早期版本中的粒度更大的粒度管理架构和架构包含的对象的权限。

·    完全限定的对象名称现在包含四部分:server.database.schema.object。

    用户与架构(schema)分开,让数据库内各对象不再绑在某个用户账号上,可以解决之前版本“用户离开公司"问题,也就是在拥有该对象的用户离开公司,或离开该职务时,不必要大费周章地更改该用户所有的对象属于新的用户所有。另外,也可让 DBA 在安装某个套装软件时,设置该套装软件所用的数据库对象都属于某个特定的架构,容易区别。也就是说,在单一数据库内,不同部门或目的的对象,可以通过架构区分不同的对象命名原则与权限。

    默认架构

    SQL Server 2005 还引入了“默认架构”的概念,用于解析未使用其完全限定名称引用的对象的名称。在 SQL Server 2000 中,首先检查的是调用数据库用户所拥有的架构,然后是 DBO 拥有的架构。在 SQL Server 2005 中,每个用户都有一个默认架构,用于指定服务器在解析对象的名称时将要搜索的第一个架构。可以使用 CREATE USER 和 ALTER USER 的 DEFAULT_SCHEMA 选项设置和更改默认架构。如果未定义 DEFAULT_SCHEMA,则数据库用户将把 DBO 作为其默认架构。

    下面的显示SqlServer权限层次结构的图可能会给我们一个直观的认识:

SQL Server 2005 Database Engine 管理着可以通过权限进行保护的实体的分层集合。这些实体称为“安全对象”。在安全对象中,最突出的是服务器和数据库,但可以在更细的级别上设置离散权限。SQL Server 通过验证主体是否已获得适当的权限来控制主体对安全对象执行的操作。

 

 

 

 

 

 

 

 

 

http://apps.hi.baidu.com/share/detail/32035562

从sql 2005开始,每个对象都属于一个数据库架构,数据库架构是一个独立于数据库用户的非重复命名空间,你可以将架构视为对象的容器,可以在数据库中创建和更改架构,并授予用户访问架构的权限。任何用户都可以拥有架构,且架构的所有权可以转移。

在sql 2000中,架构和用户是没有太大区别的,在sql 2000中一般是指所有者。sql 2005后,架构和用户明确分开,架构可以理解为对象的容器或者是命名空间。在sql 2005中,数据库用户不能直接拥有表、视图等数据库对象,而是通过架构拥有这些对象。

架构的特点如下:

1、一个架构中不能包含相同名称的对象,相同名称的对象可以在不同的架构中存在。
2、一个架构只能有一个所有者。所有者可以是用户、数据库角色或者是应用程序角色。
3、一个数据库角色可以拥有一个默认架构和多个架构。
4、多个数据库用户可以共享单个默认架构(dbo)。
5.、由于用户和架构独立,删除用户不会删除架构中的对象。
6、sql2000中对象引用的股则:[DatabaseServer].[DatabaseName].[ObjectOwner].[DatabaseObject]
      sql2005中对象引用的规则:[DatabaseServer].[DatabaseName].[DatabaseSchema].[DatabaseObject]

一、什么是架构?
架构是形成单个命名空间的数据库实体的集合。命名空间是一个集合,其中每个元素的名称都是唯一的。
例如,为了避免名称冲突,同一架构中不能有两个同名的表。两个表只有在位于不同的架构中时才可以同名。
二、与sql 2000的区别
1、在 SQL Server 2000 中,数据库用户和架构是隐式连接在一起的。每个数据库用户都是与该用户同名的架构的所有者。对象的所有者在功能上与包含它的架构所有者相同。因而,SQL Server 2000 中的完全限定名称的“架构”也是数据库中的用户。因此,从 SQL Server 2000 数据库中删除用户之前,管理员需要删除该用户所拥有的所有对象或更改这些对象的所有者
2、在 SQL Server 2005 ,架构独立于创建它们的数据库用户而存在.

三、用户架构分离的好处
将架构与数据库用户分离对管理员和开发人员而言有下列好处:
1、多个用户可以通过角色成员身份或 Windows 组成员身份拥有一个架构。这扩展了允许角色和组拥有对象的用户熟悉的功能。
2、极大地简化了删除数据库用户的操作。
3、删除数据库用户不需要重命名该用户架构所包含的对象。因而,在删除创建架构所含对象的用户后,不再需要修改和测试显式引用这些对象的应用程序。
4、多个用户可以共享一个默认架构以进行统一名称解析。
5、开发人员通过共享默认架构可以将共享对象存储在为特定应用程序专门创建的架构中,而不是 DBO 架构中。
现在访问数据库对象的完全限定的对象名称现在包含四部分:
server.database.schema.object。
用户始终拥有一个默认架构如果在创建用户时未指定默认架构,则默认架构为 dbo。
该默认架构是服务器解析 DML 或 DDL 语句中指定的未限定的对象名称时搜索的架构。因此,当引用的对象包含在默认架构中时,不需要指定架构名。例如,如果 table_name 包含在默认架构中,则语句“SELECT * FROM table_name”可以成功执行。
若要访问非默认架构中的对象,则必须至少指定一个由两部分构成的标识符 (schema_name.object_name)。引用架构范围内的对象的所有 DDL 和 DML 语句都必须符合此要求。
我们看个例子:
use AdventureWorks
--看一下dbo默认的架构是什么
select name,default_schema_name
from sys.database_principals
where name='dbo'
--执行结果
--name default_schema_name
--dbo dbo
--我们看一下属于dbo架构的表
select schema_name(schema_id)as sch ,* from sys.all_objects
where schema_name(schema_id)='dbo' and type='u'
--结果如下
--dbo AWBuildVersion 149575571 NULL 1
--dbo DatabaseLog 2073058421 NULL 1
--dbo ErrorLog 2105058535 NULL 1
--可以使用如下语句查询
select * from DatabaseLog
--如果执行不是属于dbo架构的对象,将会出现错误
select * from all_objects
--消息 208,级别 16,状态 1,第 1 行
--对象名 'all_objects' 无效。
--语句需要这样写
select * from sys.all_objects

 

 

 

1.3.3  注册数据库服务器

 SQL Server 2000中,企业管理器是其中心管理工具,数据库服务器通过企业管理器管理本地主机或者远程主机上运行的SQL Server服务器。在管理所有服务器之前必须将被管理的服务器注册到企业管理器中。注册服务器就是在企业管理器中登记的服务器,需要把它加入到一个指定的服务器组中,所有注册的服务器必须位于同一个服务器组中。

1.3.4  用户与角色

登录、用户、角色和组是SQL Server 2000 安全机制的基础。数据库用户用来指出谁可以对一个数据库进行操作。在一个数据库中用户账户唯一表示一个用户,连接到 SQL Server 的用户必须使用特定的登录标识符 (ID) 标识自己。用户对数据的访问权限以及对数据库对象的所有关系都是通过用户账户来控制的。

在SQL Server 2000 中,将一些用户集中的一个单元中并对该单元统一设定权限,这样的单元称为角色(role)。每个角色定义包括一列 Microsoft Windows NT 4.0 或 Microsoft Windows 2000 用户账户和组,并指定所允许的访问类型和范围。角色将用户集中到一个单元中,然后对该单元应用权限。在SQL Server 2000 和 SQL Server 7.0 版中,用户可属于多个角色。SQL Server 2000 Analysis Services 包括三种类型的角色:

ü         数据库角色

ü         多维数据集角色

ü         挖掘模型角色

注意:在数据库中用户账户与登录账户是两个不同的概念。一个合法的登录账户只表明该账户通过了Windows NT 认证获SQL Server 认证,但不能表明其可以对数据库数据和数据对象进行某种操作,所以一个登录账户总是与一个或多个数据库用户账户相对应,这样才可以访问数据库。

1.3.5  事务

事务是由一系列操作组成的单个逻辑工作单元。在SQL Server中,每个DML操作都是一个事务。事务可以嵌套,如果某一事务完成,则在该事务中的所有操作都完成;如果事务遇到错误且必须取消或回滚,则所有数据更改均被清除,事务是一个不可分割的工作单位。例如,在关系数据库中,一个事物可以是一条SQL语句、一组SQL语句或整个程序。在SQL语言中,定义事务的语句有三条:

BEGIN TRANSACTION

COMMIT

ROLLBACK

事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://topic.csdn.net/t/20030410/18/1644748.html

 

固定服务器角色,限制登录sql的用户权限
 
sysadmin               可以在   SQL   Server   中执行任何活动。  
serveradmin         可以设置服务器范围的配置选项,关闭服务器。  
setupadmin           可以管理链接服务器和启动过程。  
securityadmin   可以管理登录和   CREATE   DATABASE   权限,还可以读取错误日志和更改密码。  
processadmin       可以管理在   SQL   Server   中运行的进程。  
dbcreator             可以创建、更改和除去数据库。  
diskadmin             可以管理磁盘文件。  
bulkadmin             可以执行   BULK   INSERT   语句。  


数据库角色
3种   固定,定制和应用程序

固定数据库角色   描述  
db_owner                 在数据库中有全部权限。  
db_accessadmin       可以添加或删除用户   ID。  
db_securityadmin   可以管理全部权限、对象所有权、角色和角色成员资格。  
db_ddladmin             可以发出   ALL   DDL,但不能发出   GRANT、REVOKE   或   DENY   语句。  
db_backupoperator   可以发出   DBCC、CHECKPOINT   和   BACKUP   语句。  
db_datareader           可以选择数据库内任何用户表中的所有数据。  
db_datawriter           可以更改数据库内任何用户表中的所有数据。  
db_denydatareader   不能选择数据库内任何用户表中的任何数据。  
db_denydatawriter   不能更改数据库内任何用户表中的任何数据。  
只要将用户加入角色,即可获得相应的权限

定制数据库角色
比如用户只需要数据库的select,update权限,这时就要使用定制角色,生成定制数据库角色时,对其指定权限,然后将用户指定为这个角色,而固定数据库角色不需要指定权限

应用程序角色
如果用户通过应用程序访问数据库,这时应该使用应用程序角色,sql   server不再看到用户本身,而只看到应用程序,并响应应用程序角色提供权限


权限状态:
提供grant   提供用户使用特定权限  
取消revoke   取消的权限没有特别指定,用户可以从上层角色继承这个权限,比如取消用户A的select权限,但A所在的角色有select权限,则A仍可读取

拒绝deny   拒绝了用户的权限,无法再获得相应活动

原创粉丝点击