记得自己从开始编写与sql数据库相关的程序起,就一直采用sa登陆,也没有听人说过用户名和登陆名之间有什么关系,甚至都不知道这些东西,只知道sa权限很大,可以执行数据库中的所有东西,直至暑假,在看到某一项目在探讨关于数据库登陆权限保护时,自己才重视到了这一点。在网上查了很多资料,自己也总结了一些东西。
首先,要认清数据库登陆名和数据库用户名之间的关系。数据库登陆名和数据库用户名是有差别的,在一个数据库中是一一相对应的关系。如果把数据库比作一个大厦,那么数据库登录名就是进入大厦的通行证,而用户名则是进入大厦房间的钥匙,如果每个房间看做是Sql数据库(大厦)的一个数据库,那么每个登陆名可以在每一个数据库中创建一个用户,如果没有创建用户,则登陆名就只能纯粹的登陆数据库,什么事情都干不了。下面就是插入数据库登录名和用户名的语句:
exec sp_addlogin '登录名','密码','选择的数据库'
exec sp_adduser '用户名','登录名'
然后,将光把登录名和用户名添加进入数据库还不行,还要对你添加的用户名进行赋权,此时你的数据库的用户名才有用。如下代码:数据表名称指的是用户能操作的数据库的一个表格名称,
grant select,update,insert on 数据表名称 to 用户名
这样,一个正确的用户就创建好了,现在你可以用你的登陆名和用户名操作数据库中的数据了,当然,我还查到网上说的赋予登录名的用户角色问题,如下代码:
--新增用户
exec sp_addlogin 'test' --添加登录
exec sp_grantdbaccess N'test' --使其成为当前数据库的合法用户
exec sp_addrolemember N'db_owner', N'test' --授予对自己数据库的所有权限
这是网上搜索到的一个添加用户的密码,虽然自己没有去试过,但感觉上面的那两个存储过程用起来还是比较简单一点,而且赋予权限更清晰,下面的sp_addrolemember,我查过帮助文档,确实有很多说明数据库角色的,但总感觉没有grant语句来的详细。
另外还附上平常用的比较多的关于数据库用户权限的语句:
--查看所有用户
exec sp_helpuser
--查看某用户的权限
exec sp_helprotect @username='用户名'
--查询某数据库中的所有表格
select name from sysobjects where xtype='u'
--删除用户名和登陆名的存储过程
exec sp_droplogin '登录名'
exec sp_dropuser '用户名'