分类: 数据库开发技术
2012-04-24 16:04:53
用sql2000已有10年了,对于从2005年就发布的sqlserver2005,一直抱有抗拒的心理,因为我发现它把很多简单的事搞的复杂了,虽然解决了一些新的问题,但是造成的麻烦比解决的问题要多。
新的用户角色和架构模式就是一个典型,而sql2005发布的sp1,sp2,sp3一直都没有认真的把这个问题解决好。
好,现在谈谈具体这个问题是什么。
这个问题就是这三者的关系,按正常的理解,数据库中的表和触发器,规则,默认值等对象是属于架构的,这个没错。
然后,用户可以拥有架构,角色也可以拥有架构,用户有默认架构,角色没有默认架构。这些是大家可以理解的。
但是现在又多了一个问题,就是角色也有一个所有者的概念。这是什么意思呢?意思就是说,某一个用户a属于某一个角色a,但是这个角色a是被另一个用户b所拥有,但是这个角色a里面默认却是不包含它的所有者用户b,这一来,就全乱套了,关系复杂程度大增。正常情况下,人人都认为如果这个角色a拥有某个架构a,那么用户a自然也就有读写架构a里面的对象的通道,但是你在管理界面上是看不出来的,因为你点击查看用户a的属于,它的此用户所拥有的架构是灰色的,什么也不显示,这种莫名其妙的问题往往搞的人很混乱。微软的设计人员难道自已不知道吗?
还有一个问题就是当你新建一个用户b,然后把这个用户b加入db_owner角色,然后用这个用户登陆并新建一个架构b,这个架构b的所有者是用户b ,但是用户b的默认架构还是刚建用户时默认的dbo.这时你要修改用户b的默认架构为架构b(用的管理员账户登陆的),对不起,正常方式不起作用,也就是你在用户b的属性中直接修改默认架构名为架构b,点击确定,没用,再打开属性一看,默认架构还是dbo。这个bug真是让人费解。你如果不让人修改,那你就不要让它有机会改,你让人改了,又不提示什么错误,而是根本没有改成功,还是老样子,有这样呼悠人的吗?
还有例如某个用户新建了一个数据库角色,但是这个角色默认并不包含这个用户,必须要手工加入,这个更是莫名其妙的。
还有一个问题,当你看一个用户的属性的时候,它不能直观的显示用户通过角色而拥有的架构,也不显示此用户属于puclic角色,即使我们都知道所有用户都属于public,你至少也要显示一下啊,最多让用户不能取消不就行了。
还有就是对象关系转移太麻烦,按照通常理解,查看对象属性的时候,就应该可以直接选择对象所有者,但是ms的模式显然不是这样,目前好象只有用ALTER SCHEMA才能进行转移,这点真是弱智。
其他还有一些老问题,到现在还没有解决,其中一个就是可编程对象的属性列的问题,怎么微软上千人的开发队伍就想不到设计一个自定义属性列表呢?我建了上百个存储过程,每天都有修改,但是我不能直观的看到哪些是最新修改的,非要用sql来查才能显示,这个不是很不直观吗?难道不能就直接在列表上显示每一个存储过程的最后修改时间吗?这个难道很难开发吗?
好好的一个数据库,对象关系从sql2000的2*2=4,突然搞成3*3*3=27,简直就是跳上天了,与之配套的管理界面却概念不清,混乱不堪,我自从装上了sql2005,就严重的发现此类问题,不知道ms是怎么想的。
不知道sql2008有什么改变,目前没有时间去装sql2008,建议ms下点功夫设计一个更好一点的用户,角色,权限和架构关系管理器,让人们更直观更清晰的去理解这个越来越复杂的模型,因为大部分人都不是专职的dba,往往这几天研究通了,等过一个月做下一个项目的时候又忘记了,因为规则越多,越不容易记住,等到用的时候,总是出现红叉叉提示,心里真不是滋味。