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
详细可参考: