sql schema的个人理解

数据库的架构类似于高级语言的中命名空间  

如果一个数据库对象被包含于一个架构内  

那么只有拥有该架构或拥有该架构授权的用户才能对其操作

架构的意义在于

1.避免数据库对象的命名冲突

2.分离数据库对象与用户  避免了数据库对象迁移的麻烦

 

代码例子

create login testlogin
with
    password = '123456'

create user testuser from login testlogin

create login testlogin2
with
    password = '654321'

create user testuser2 from login testlogin2

--创建架构 sch 并把权限授予用户 testing
create schema sch 
authorization testuser 
create table schtable (
    ID int,
    nkey int,
    value varchar(23)
    )

--查询当前数据库下的构架
select * from sys.schemas

go

setuser

setuser 'testuser'

--用户 testuser 没有指定默认架构 自动分配为 dbo 架构 所以以下两句语句等价
--用户 testuser 没有分配权限 所以查询被拒绝
select * from About
select * from dbo.About

--上文中  用户 testuser 被授予 sch 构架的权限 所以该查询成功
select * from sch.schtable

setuser

setuser 'testuser2'

--用户 testuser2 没有指定默认架构 自动分配为 dbo 架构 所以以下两句语句等价
--用户 testuser2 没有分配权限 所以查询被拒绝
select * from About
select * from dbo.About

--用户 testuser2 没有被授予 sch 构架的权限 所以该查询被拒绝
select * from sch.schtable

setuser

--把 sch 架构下的对象 schtable 迁移到 dbo 架构下
alter schema dbo
transfer sch.schtable


--删除表 用户名 登陆名 架构名 还原数据库
drop table schtable
drop user testuser
drop user testuser2
drop login testlogin
drop login testlogin2
drop schema sch

 

详细可参考:

http://www.cnblogs.com/chillsrc/p/3389374.html

posted on 2014-07-12 21:25  yl1993  阅读(1657)  评论(0编辑  收藏  举报