分享

数据库安全

 耳语轻言 2017-08-23

让操作系统用户zhangsan能够连接sqlserver数据库

注销操作系统使用zhangsan用户连.sqlserver,发现无法连接sql server

注销操作系统,使用administrator登录,连接sqlserver ,使用Windows身份验证

Administrator能够登录是因为,在登录名中有

要求如下:

能够让zhangsan用户连接sqlserver的同时,能够默认连接到数据库test

先创建一个数据库

新建登录名

在出现的对话框中单击“搜索”

但是在数据库test的安全性里并没有zhangsan用户

新建zahngsan用户

注销操作系统,使用zhangsan用户登录

只对test数据库有权限访问

总结过程:

连接数据库的账户

1.       Windows上创建账户zhangsan

2.       sql中创建登录名sqlsrv\zhangsan

3.       在数据库中创建账号 zhangsan

Sql账号sql服务器存储用户名和密码

使用administrator登录操作系统,连接sqlserver数据库。

sql server 的身份验证模式修改为sql server windows身份验证模式(混合身份验证)

修改sql server windows身份验证模式(混合身份验证)

修改完之后必须重新启动数据库

Sqlserver中有一个系统管理员sa,sa账户默认是禁用的。右键选择sa账户的属性,启用SA账户

这里指的强制密码策略是使用操作系统本地安全策略中的账户安全策略,

使用sa连接数据库

单击administrator ,新建查询

测试SA用户的权限

测试SA用户能否管理用户

使用user1连接数据库

User1用户还没有成为test数据库的用户

现在就可以用user1用户登录数据库了,

测试是否可以用user1用户创建数据库,测试结果是不能创建数据库

但是使用sa用户就可以创建数据库

数据库中有个特殊的账号guest(来宾账号)默认是禁用的,启用此账号意味着没有明确授权连接数据库的用户可以使用guest身份来连接数据库。

所谓的没用明确授权指的是在

在没有启用ceshi1数据库的guest用户之前,user1用户访问ceshi1数据库是不能访问的

启用ceshi1数据库的guest账户,Guest账号不能使用图形界面启用,只能使用命令启用

测试user1用户能否访问ceshi1数据库

禁用ceshi1数据库的guest账号

数据库中的架构

架构用来分类表,同一类的表放在一个架构中,所以可以有相同名称的表,只要架构不一样就可以。

架构可以简化授权

create database test01

create table student01

(

studentID int,

snam nvarchar(10)

)

新建sql登陆名studentteacher,这两个用户默认数据库为test01

新建架构

架构名称为hr,架构的所有者是teacher用户

在创建一个名为person的架构,所有者为student

如何在架构下创建表hr.student01

使用teacher用户连接数据库,新建查询,teacher 用户是否能够为hr.student表插入记录

验证结果是可以插入记录,因为teacer用户是hr架构的所有者。

使用teacher用户连接之后就可以看到hr.student01表了

新建查询,为student01表插入记录

数据库和架构级别的权限

服务器级别权限

数据库级别的权限

架构级别的权限

表的权限

列的权限

服务器级别的权限

相当于Windows里的组的概念:

student用户加入到sysadmin组中成为数据库管理员

加入之后student就拥有了数据库管理员权限了,为了安全起见,不要将普通用户加入到sysadmin组中。

可以测试student用户加入sysadmin前后的区别,例如创建表或数据库的权限,普通的student用户是不能创建表和数据库的。

为了测试,将student用户从sysadmin组中移除

使用student账户连接数据库

目前student用户是无法访问adventureWorks

adventureWorks表中授权student用户可以访问adventureWorks

新建student用户,选择登陆名为student,默认架构选择person,其他默认,然后单击确定

在数据库级别上为student用户授予select权限

 

 

因为为student用户赋予了select权限,所以可以看到所有的表

因为student用户的默认架构是person,所以student用户访问person的表时可以直接写表名,不用写架构名

但是访问humanResources.department,如果不加架构名humanResources,是无法select

select * from HumanResources.Department就可以查询了

目前student用户对adventureWorks表只有select权限,测试student用户是否有创建表的权限

可以在数据库级别上给student用户创建表的权限

现在student用户没有使用person架构的权限,但是已经拥有了创建表的权限。

取消student用户的create table select权限

架构级别权限

student用户拥有personproduction架构,在安全性---'用户'---双击'student'用户,然后单击“确定”

设置数据库级别权限

 

授予student用户创建表的权限

测试student用户是否可以创建表,可以在自己的架构下创建表了,不在提示没有使用person架构的使用权限了。

取消刚才在数据库级别为student用户授予的create表的权限

查看student用户只能看见自己所拥有的架构下的表了,因为刚才修改了student用户的拥有的架构为personproduction.

如果student用户想查看人力资源部的表,我们可以为student用户授予架构级别的权限

搜索到student用户,为student用户授予select权限,单击“确定”

验证

表的权限

当前student用户若想删除人力资源某个表中的内容,测试是否可以

此时可以在表上赋予student用户删除或更新的权限

授予更新和删除的权限

现在已经有删除权限,但由于表中做了触发器,所以不能删除。

我们测试一下更新功能是否可以,可以发现更行成功

在表级别上取消student用户的更新权限

这就是表级别的权限,在表的属性中授予

列权限

student用只有更新表中某一列内容的权限

student用户授予只能更新NationalIDNumber列的权限

测试更新NationalIDNumber

如果更新其他列,是否可以呢,结果可想而知,student用户对Title列没有更新权限。

列的权限也是在表的属性上完成的

总结如下:

服务器登录名:指有权限登录到某服务器的用户;

 服务器角色:指一组固定的服务器用户,默认有9组; 

 登录名一定属于某些角色,默认为public   服务器角色不容许更改  

 登录后也不一定有权限操作数据库  

数据库用户:指有权限能操作数据库的用户; 

数据库角色:指一组固定的有某些权限的数据库角色;

数据库架构:指数据库对象的容器;   

数据库架构:类似于数据库对象的命名空间,用户通过架构访问数据库对象

Ø  服务器登录名属于某组服务器角色;  

Ø  服务器登录名需要于数据库的用户映射后才拥有操作数据库的权限   数据库用户属于某组数据库角色以获取操作数据库的权限  

Ø  数据库角色拥有对应的数据库架构,数据库用户可以通过角色直接拥有架构   

Ø  数据库用户有默认架构,写SQL语句可以直接以“对象名”访问

Ø  非默认架构则要以“架构名.对象名”访问

 

 

 

 

 

 

 

 

 

 

 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多