有关数据库的安全性、权限等方面的东西,那就是先说一下数据库安全性和权限的问题,首先是对数据库的登录名、用户和架构做一个简单的介绍。登录名大家都知道就是登录数据库时用的名称,比如数据库默认的登录名sa,如果不对sa登录名的权限做改动的话,sa登录后对数据库所有功能有完全的访问管理权限。那么什么是用户名呢?拿sa登录名来说,当用sa登录数据库后新建一个数据库,展开数据库下面的安全性-用户,可以看到有dbo、sys、guest等用户名,而sa登录后所有的操作的用户就是dbo,这个也是数据库默认的。也就是说sa是登录名,登陆后的用户名是dbo。那么架构呢?大家都知道当我们用sa登录数据库后创建一个表UserInfor,那么当展开数据库后可以看到dbo.UserInfor,这个dbo是架构名,而非用户名,一开始我也不明白在网上查了一些资料,有的说dbo.UserInfor是用户名,到底是什么呢?下面我们做一个测试。
对权限的限制可以使用登录名结合用户来实现,就先创建一个登录名,命名为me。首先我们先看一下数据库“安全性”节点。
我们可以看到有我们登录的sa登录名,接着我们在登录名上右键创建一个新登录名me。
这个地方,我们用Sql Server身份验证登录,在服务器角色栏只勾选public,状态栏选择授予和启用,具体的设置后面说。确定即可。这时再看登录名节点可以看到新创建的登录名me。
然后我们再创建一个数据库UserData,接着针对这个数据库我们在数据库的安全性节点的架构中新建一个架构medbo。
填写一个架构名即可,如下:
确定即可,然后再针对数据库在用户节点创建一个用户名mename,这里主要是和架构做区分。
这里需要注意一下,登录名要选me,默认架构medbo,用户拥有的架构要勾选刚刚创建的架构,角色成员选db_owner。确定即可,这时就可以看到刚才创建的用户名和架构了。
然后去安全性节点,展开用户名找到me用户右键属性,用户映射选项,可以看到
到这里登录名和用户名以及架构都创建了好,那么怎么用呢,我们可以用刚刚创建的登录名me重新登录一下数据库,在UserData数据库中创建一张表UserInfor。
可以看到新建的表是medbo.UserInfor,而不是mename.UserInfor。由此可见,用sa登录后创建的表代表dbo.Table这dbo是架构,而非用户名。
那么权限和角色怎么设置呢?接着我们回到me登录名的属性那,查看服务器角色选项,
可以看到有多个服务期角色,而刚才我们创建me登录名的时候只勾选了public,每一角色代表什么呢?下面介绍一下。
bulkadmin:这个服务器角色的成员可以运行bulk insert语句
dbcreater:可以创建、更改、删除和还原任何数据库
diskadmin:管理磁盘文件,比如镜像数据库和添加备份设备
prosessadmin:多任务化可以通过执行多个进程执行多件事
securityadmin:管理登录名和属性
serveradmin:可以更改服务器范围内的配置选项和关闭服务器
setupadmin:为需要管理链接服务器和空值启动的存储过程的用户设定,能增加、配置和删除链接服务器,并能空值启动过程
sysadmin:执行任何任务
public:初始状态时没有权限,所有数据库都有他的成员
接着看一下用户映射选项
也有多个角色,每一个角色如下:
db_owner:在数据库中执行任何操作
db_accessadmin:从数据库中增加或删除用户
db_backupopperator:允许备份数据库
db_datareader:允许从任何表中读取数据
db_datawriter:允许网任何表中写入数据
db_ddladmin:允许增加、修改和删除任何对象
db_denydatareader:拒绝查看任何数据,但可以通过存储过程查看
db_denydatawriter:拒绝修改任何数据,但可以通过存储过程修改
db_securityadmin:可以更改数据库中的权限和角色
public:每个数据库角色都属于public角色,当尚未对某个用户授予或拒绝对安全对象的特定权限时,该用户将授予该安全对象的public角色权限,且不能删除。
还有一点,就是me登录名属性的用户映射中我们只勾选了UserData数据库,其他的没有勾选,如果我们用me登录名登录数据库然后访问sa登录名下创建的数据,这时是无法访问的:
由此可以看出,登录名和权限的作用了。
到此,新建登录名和用户名,以及配置权限角色就结束了,这里只是简单的对数据的登录名,用户名及架构和权限做了简单是介绍和使用。具体的项目中大家可以根据不同所需来选择创建不同的登录名和用户名以及权限和角色就可以了。
数据库中的每个用户都有自己的默认架构,默认架构可以再创建数据库时由创建着设定,系统默认架构为“dbo”