|
2)、表在哪里?
表名称存在xyz库中的sysobjects表且xtype='u',如图11,输入SELECT *FROM sysobjects where xtype='u'可以查出表名称是test,记住我们刚建的表test对应的id是357576312
3)、有哪些字段?
test表中有哪些字段呢?该表的字段存在xyz库中的syscolumns表中,且id等于sysobjects表中test表对应的id,也就是我们上面查出来的357576312。
如图12,输入SELECT * FROM syscolumns where id='357576312'可以查出test表中的字段。
4)、总结
当有相应权限的用户连到SQL Server后,能通过查询master库中的sysdatabases表得到用户建的数据库名称,接着再查询用户数据库的sysobjects表查出创建的表,接着再查询用户数据库的syscolumns表查出表中的字段,进而查出纪录。
这个例子提到有相应权限的用户,那用户具有哪些权限呢?我们接着说。
2、理解用户、角色和权限这几个概念
要对这几个概念讲得很明白,需要很大的篇幅,本文只作简要介绍。
要想访问SQL Server必须是它的一个用户,如果要访问某个数据库,必须赋予该用户访问此数据库的权限。角色就是一系列权限的集合。用户和角色的关系就像Windows系统中的用户和用户组的关系。
还是举例说明吧!sa为什么有那么大的权限?
sa是SQL Server的默认超级用户,就像系统的administrator用户一样,如图13,点击在“安全性”——〉“登录”,在右栏的sa用户下鼠标右键,出现图14的sa属性界面选到“服务器角色”项,可以看到sa的角色是system administrators(简写为sysadmin),前面提到角色就是一系列权限的集合,点击图14的“属性”,在图15中可以看到该角色拥有操作SQL Server的所有权限。如图16可以看出sa具有所有数据库的访问权限,现在明白sa为什么有那么大的权限了吧。
实际做管理系统时并不需要用户有那么大的权限,一般只要能访问自己建的库就行了。可以新建个用户,只给此用户有限的权限,这样安全系数应该高些,从这个思路出发看看如何实现。
1)、新建aaa用户
如图17,新建登录后出现图18界面,输入用户名aaa,在输入个强壮的密码。
2)、设置权限
如图18,在“服务器角色”选项中什么也不选,如图19,在“数据库访问”选项中只选“xyz”库,也就是说只让aaa用户访问xyz库。“数据库角色中允许”只选默认的“public”。
3)、测试
设置好后,用aaa用户登陆“SQL 查询分析器”,如图21,执行exec xp_cmdshell 'net user user1 /add',出现了期待的结果,没有权限执行。
接着执行SELECT name FROM sysdatabases where dbid>6,期待的结果是没有权限执行,可实际的结果和图10的查询结果一模一样,aaa用户不是没有master库的权限吗?aaa用户除了不能访问自己建的库wz_cxxt_new外,其它的库都能访问,问题出在哪呢? |
| 教程录入:jerome 责任编辑:jerome |
上一篇教程: 新手宝典:SQL Server的几个安全问题(1)
下一篇教程: 新手宝典:SQL Server的几个安全问题(3) |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |