当前位置: 首页 > 互联网 > 正文

Sqlserver数据库schema相关知识

数据库架构schema实现了,数据库对象与数据库用户直接映射的分离,用户与数据库对象可以通过schema来映射控制。

数据库对象(视图,表,函数等)可以属于某个schema.数据库用户可以属于某个schema,表示拥有某个schema下对象的权限。如果未指定,数据库对象属于架构(schema)dbo,sa用户默认属于dbo架构(dbo:database owner)。当用户访问数据库对象时,如采用server..objects时默认寻找对应schema下的数据库对象:比如用户tmp_user属于schema:tmp,则上述访问默认转变成:server.tmp.objects.

创建用户,并指定用户默认的schema:

[sql]CREATE LOGIN [User_tmp] WITH PASSWORD = N’123456′
CREATE USER [User_tmp] FOR LOGIN [User_tmp] WITH DEFAULT_SCHEMA = [tenant][/sql]

创建scheme:

[sql]CREATE SCHEMA [tenant] AUTHORIZATION [dbo][/sql]

给schema设置权限:

[sql]GRANT INSERT, SELECT, UPDATE, DELETE, EXECUTE, REFERENCES ON SCHEMA:: [tenant] TO User_tmp[/sql]

创建带schema的数据库对象,比如创建一个视图:

[sql]CREATE VIEW tenant.PrinterCookies
WITH SCHEMABINDING
AS
SELECT ticket_no, user_agent, create_date, create_by
FROM dbo.PrinterCookies
GO[/sql]

注意:带WITH SCHEMABINDING标记时,如果对应的表做了修改(增加字段除外),需要删除原视图,再去修改对应的物理表,再建带schema的视图。

用户登录时,只显示他所在schema下的所有数据库对象,如上述用户只显示带tenant的对象,无法查看其它dbo的数据库对象。但tenant的所有者是dbo,所以dbo下可以看到所有tenant的对象。

同样的,因为之前给tenant分配了数据库的增,删,改查权限,可以对tenant下的数据对象作相应的操作权限。

当使用下面的SQL语句时:SELECT * FROM SqlTest..PrinterCookies,当用用户[User_tmp]登录查找时,会匹配到SqlTest.tenant.PrinterCookies视图对象,而用dbo登录时,会匹配到SqlTest.dbo.PrinterCookies物理表对象。当然,各自查询呈现的数据是不一样的。

综上所述,基于schema的不同,我们可以规约出很多不同的权限。同时,根据schema的默认匹配,可将数据库的物理表逻辑往上层通过schema来管理控制。从而让不同的登录用户,有差别的访问同一个数据库资源,达到数据管理的目的。

本文固定链接: http://www.byhard.com/?p=1130 | 海纳百川

该日志由 byhard 于2014年04月17日发表在 互联网 分类下,
原创文章转载请注明: Sqlserver数据库schema相关知识 | 海纳百川
关键字:
【上一篇】
【下一篇】

Sqlserver数据库schema相关知识:目前有3 条留言

  1. 板凳
    百家乐:

    支持一下!

    2014-04-23 17:17
  2. 沙发
    尚吾网:

    坚持更新博客就像坚持写日记一样,不仅是习惯,也是耐力,表示支持

    2014-04-25 21:14
    • byhard:

      你们的支持,是我前进的动力源之一,谢谢啦。

      2014-04-28 08:34