日期:2014-05-17  浏览次数:20602 次

sqlserver2008,创建一个用户和对应一个架构,只对这个架构下的表有访问权限,该选哪个数据库角色?
sqlserver2008,创建一个用户和对应一个架构,只对这个架构下的表有访问权限,该选哪个数据库角色?

或者是怎么设置?

还有一个问题就是,同一个数据库中,分别用多个架构建表(oracle中经常这样做)

,除了逻辑上清晰之外,这样有什么好处?跟把这些不同架构的表分别建库对比,有什么优势?

我的理解是,对于关联系不太强的表之间,没必要建在同一个库中,因为比如A系统的有20张表,B系统中30张表

A系统访问B系统中的两张表,可以建在同一个库中,也可以分别建库。

倘若是A系统数据量比较小,B系统的数据量比较大,首选备份策略可能就不一样,

另外,对于A访问B的表的问题,我认为通过新建账号更好,因为假如授权的话,对A授权B的其中两张表的访问权限,
这样绕来绕去,感觉有点乱啊,


[img=http://img.my.csdn.net/uploads/201209/04/1346767903_8126.JPG]

[/img]







---------------------------------------------------隔离广告--------------------------------------------------------
------解决方案--------------------
CREATE LOGIN Lg_for_test WITH PASSWORD = 'F@r-Test'
GO

CREATE DATABASE ForTest
GO

USE ForTest
GO

CREATE USER u_for_test FOR LOGIN Lg_for_test
GO

CREATE SCHEMA NewSchema
go

CREATE TABLE T1(id INT,NAME VARCHAR(20))
go

CREATE TABLE NewSchema.T2(Nid int,DD datetime)
go

GRANT SELECT ON SCHEMA :: NewSchema TO u_for_test;

--重新使用Lg_for_test登录即可。

------解决方案--------------------
另外,就目前的使用情况来看,不建议在一个库中使用架构来分离各不同系统的表。

原因:
1、架构的设立,为维护上添加了一层需要处理的权限设定关系。(相对于使用数据库分离和表名称分离来说,耗费人力成本更大;复杂度的增加,发生错误的可能性也增加)

2、实际上跟oracle中的架构还是有比较大的差别。参考http://lovespss.blog.51cto.com/1907593/531976


另外,分库对应系统,还是用同一个库对应不同系统,完全是根据需求而定。
数据量,线上使用数,硬件能力,应用系统关系等等,综合考量下,进行的设定。

------解决方案--------------------
SQLServer里面架构主要起到安全性的作用,比如人力的表,用HR.XXX,财务的表,用FI.XXX,一是容易标识。二是,对每个部分做权限管理,就像你标题那样,人力系统一般不需要访问财务的表,这样就可以使得财务的数据不容易受到损害或者不容易被知道(因为财务的数据比较敏感)。共用的数据,架构可以设为dbo,对于规模比较大,业务比较复杂的系统,个人还是建议使用架构区分。架构你可以理解为【数据库名】.【架构】.【表名】。SQLServer在后续版本越来越强调,所以还是有它的重要性。当然小系统就没必要了。