关于SqlServer2005安全机制(一)
关于数据库安全机制,胡百敬、姚巧枚编著的《Sql Server2005数据库开发详解》,讲得浅显易懂,很值得看。。 以下是我看书和做实验得出的结论,如有错误的地方还望指正。 create login tempuser with password='123' 上面这一语句只是创建了与数据库的链接,具有Sql Server分配的默认的权限。 例如其默认的数据库是master,可以在相应权限下查询master的表。但tempuser只是一个登录名, 在master的用户表里面并没有与之对应的用户,这一点是显然的。 由于tempuser默认的数据库是master,显然它并没有访问其他用户创建的数据库的权限。 如果想访问其他数据库,则要修改该登陆用户的默认数据库。 alter login tempuser with default_database=adventureworks 或 create login tempuser with password='123',default_database=Adventureworks (注意上面语句的执行都是在master为环境的,也就是用DBA的权限执行的) 但是这样带来了一个问题,也就是用登陆用户tempuser的时候会Server抛出异常 ?也就是tempuser将不能再登陆Server服务器,因为它默认的数据库是adventureworks, 但数据库adventureworks里面却没有与之对应的用户,所以就不能登录了。 use Adventureworks 上面的语句执行之后,再次用登录名tempuser就可以成功登陆了。 只不过没有给Atempuser 用户相应的权限,故用tempuser登陆之后能做的事情非常有限。 如果更改登陆之后的权限,只需更改用户Atempuser 或登录账号tempuser相应的权限就OK了 例如用DBA权限在数据库Adventureworks创建了表Table1,如果用tempuser登陆的话,因为用户Atempuser没有查找的权限,所以执行select语句会抛出异常 消息 229,级别 14,状态 5,第 1 行 ? 如果分配给用户Atempuser? select权限就行了。(待会再写,同学要来玩......)。 一个数据库可以有很多用户,每个用户的权限不同。 每个登陆账号可以与数据库的某个用户映射,且只能是一个。如果连续执行以下语句会抛出异常。 use Adventureworks create user auser for login? tempuser ? 出现错误消息。 但是每个登陆账号在不同的数据库里面各有用户映射,以此来管理登陆的数据库
另外关于Sql Server2005里面模式的概念我觉得就是一个命名空间的作用,比如我们用C#/C++等编写类的时候如果没有添加命名空间的引用,则会到默认命名空间下面找。如果没有添加命名空间则需要用 命名空间.类 这样的二级结构来找相关的对象类型。 其实Server2005沿用了这种思想。在Server 2005里面每一个表,视图,存储过程等都看做一个对象,而模式的作用就是对这些对象分门别类。两个不同模式下的对象可以同名,这样访问的时候就必须加上模式名。如果用户没有加模式名,则系统会首先在该用户具有权限的模式下面找,如果没有找到就到默认模式(dbo)下面找。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |