SQL Server 2008的用户架构分离

在 SQL Server 2005 中,架构行为已更改。架构不再等效于数据库用户;现在,每个架构都是独立于创建它的数据库用户存在的不同命名空间。也就是说,架构只是对象的容器。任何用户都可以拥有架构,并且架构所有权可以转移。

 新行为
所有权与架构的分离具有重要的意义:

架构的所有权和架构范围内的安全对象可以转移。有关详细信息,请参阅 ALTER AUTHORIZATION (Transact-SQL)。

对象可以在架构之间移动。有关详细信息,请参阅 ALTER SCHEMA (Transact-SQL)。

单个架构可以包含由多个数据库用户拥有的对象。

多个数据库用户可以共享单个默认架构。

与早期版本相比,对架构及架构中包含的安全对象的权限的管理更加精细。有关详细信息,请参阅 GRANT 架构权限 (Transact-SQL) 和 GRANT 对象权限 (Transact-SQL)。

架构可以由任何数据库主体拥有。这包括角色和应用程序角色。

可以删除数据库用户而不删除相应架构中的对象。

如果为 SQL Server 早期版本编写的代码假定架构等效于数据库用户,这些代码可能会返回错误的结果。

为 SQL Server 早期版本设计的目录视图可能会返回错误的结果。这包括 sysobjects。

新目录视图
从 SQL Server 2005 开始,架构是在元数据中反映的显式实体;因此,架构只能有一个所有者,但一个用户可以不拥有架构,也可以拥有多个架构。这种复杂关系并未在 SQL Server 2000 系统表中反映,因此 SQL Server 2005 引入了新的目录视图,以准确反映新的元数据。

下表显示了 SQL Server 2000 系统表与其 SQL Server 2005 等效项和更高版本的目录视图之间的映射。

SQL Server 2000 系统表  SQL Server 2005 及更高版本的目录视图 
sysusers
 sys.database_principals

sys.schemas
 
syslogins
 sys.server_principals
 

SQL Server 2005 引入了超过 250 个新目录视图。极力建议使用新的目录视图访问元数据。有关详细信息,请参阅目录视图 (Transact-SQL)。

新的 DDL 语句可以将旧的目录视图(如 sysobjects)不能准确反映的复杂关系引入系统元数据中。在此示例中,用户 ID 与由 sysobjects 返回的架构名称之间不同步,无法反映用户与 SQL Server 2005 中引入的架构之间的区别。

 复制代码
use tempdb
go
create login u1 with password = 'Mdfjd$sakj943857l7sdfh##30'
create user u1 with default_schema = u1
go
grant create table to u1
go
create schema sch1
go
create schema u1 authorization u1
go
execute as user = 'u1'
go
create table t1(c1 int)
go
revert
go
select user_name(uid) , * from sysobjects where name = 't1'
go注意:
您必须在任何曾经使用过下列 DDL 语句的数据库中使用新的目录视图:CREATE/ALTER/DROP SCHEMA;CREATE/ALTER/DROP USER;CREATE/ALTER/DROP ROLE;CREATE/ALTER/DROP APPROLE;ALTER AUTHORIZATION。
 


默认架构
为了解析不完全限定的安全对象名称,SQL Server 2000 使用名称解析来检查执行调用的数据库用户所拥有的架构和 dbo 所拥有的架构。

从 SQL Server 2005 开始,每个用户都拥有一个默认架构。可以使用 CREATE USER 或 ALTER USER 的 DEFAULT_SCHEMA 选项设置和更改默认架构。如果未定义 DEFAULT_SCHEMA,则数据库用户将使用 dbo 作为默认架构。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16436858/viewspace-503154/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16436858/viewspace-503154/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值