Sql Server数据库中的用户及权限配置,保障数据库安全
最近有个朋友的网站被攻击,漏洞是比较过时的SQL注入,在帮修复的过程中,发现数据库用的是超级管理员用户sa,提高数据安全性和服务器安全性的措施之一便是降低web应用数据库用户的权限,回顾了一下Sql Server数据库的用户及安全策略,做个小结。
一.数据库登陆类型
打开数据库客户端工具,服务器名称:“.”代表本地计算机,选择下拉框,可以看见还有一个与本机主机名相同的内容,也代表于本地服务器连接;要连接远程服务器的话,在此处填写远程IP地址;如下图
1)身份验证:身份验证下拉框内容为”Windows 身份验证“和 ”SQLServer 身份验证“两种登陆方式,这就是登陆账户。
”Windows 身份验证“:适合于Windows平台用户,不需要提供密码和Windows集成验证;
”SQLServer 身份验证“:适合于非Windows平台用户或Internet用户,需要提供登陆账号和登陆密码;账号sa就属于该种登陆账户,是一个超级管理员登陆账号。
2)sa登陆账号
sa是一个超级登陆账号,我们使用他后,可以看见数据库服务器中的所有数据库,及各数据库中所有的表,拥有着管理数据库服务器的所有权限,因为该账号的特殊性,使用该账号,对数据库安全性极其不安全(因为可以看到所有的数据库,数据表,并能对数据库进行增删改操作)。为此,在程序开发中,有必要通过添加新的登陆账号,添加对应的数据库用户,并对数据库用户设置不同的权限,以保证数据库及数据的安全性。
下面内容主要说明怎样创建登陆账号,创建数据库用户,及对数据库用户授予权限。
二.登陆账号添加与删除
1)登陆账号添加
1.创建Windows 登陆账户, 语法: exec sp_grantlogin '登陆账号'
use master
go
exec sp_grantlogin 'AY140317181605Z\jjlm'
--AY140317181605Z代表本机机器名,jjlm代表该电脑的一个用户名,这个账号可以通过"计算机管理"中的"本地用户和组"来为该电脑添加用户,并设置对本电脑操作权限
2.创建SQL Server登陆账户, 语法: exec sp_addlogin '登陆账号',‘登陆密码’
use master
go
exec sp_addlogin 'jjlm','123456'
执行代码后,在数据库客户端会显示这两个登陆账号,下图显示第二个账号,第一个被删掉了所以不显示了。
2)删除登陆账户,语法:exec sp_droplogin '登陆账号'
use master
go
exec sp_droplogin 'AY140317181605Z\jjlm'
用新创建的登陆账号登陆SQL server客户端后(没有为其添加数据库用户和权限),点击里面的数据库发现SQL server客户端报以下提示
并且[安全性]里的[登陆名]与sa账号里的内容不同,只有'sa'和刚刚创建的'jjlm'账号
备注:
使用刚创建的登陆账号登陆客户端,在没有为其设置数据库用户的时候,只能看见里面有的数据库,不能打开数据库,更不能查看其中的数据表,不能执行SQL语句的查询.
三.数据库用户
1)创建数据库用户
指定为哪个数据库添加数据库用户,基本语法:exec sp_grantbaccess '登陆账户名','数据库用户名'
use jjlm--为数据库jjlm创建数据库用户名
go
exec sp_grantdbaccess 'jjlm','jjlmUser01'
创建登陆账户都是在master数据库下执行的,而数据库用户名是为具体的数据库内创建,所有使用 use jjlm go 语法指向jjlm数据库,调用系统存储过程sp_grantdbaccess 创建名为jjlmUser01的用户名,其登陆账号名为jjlm。
此时,数据库jjlm中的安全性里的用户已有jjlmUser01用户名
dbo数据库用户名,它表示数据库的所有者(DB Owner)。可以对数据库和其对象进行所有的管理工作,拥有数据库操作的所有权限。我们无法删除dbo用户,此用户出现每个数据库中,默认分配给sa登陆账号,所以sa登陆账号可以访问所有的数据库。
2)删除数据库用户
同样是在具体的数据库中执行删除,而非master数据库中执行
语法: exec sp_dropuser '数据库用户名'
use jjlm
go
exec sp_dropuser 'jjlmUser01';
四.给数据库用户授权
为数据库创建完数据库用户名后,使用jjlm登陆账号登陆客户端后,发现我们只能打开数据库jjlm,其他数据库同样无法打开,打开jjlm数据后,发现‘表’中内容为空,没有数据表,这是为何?因为我们还没有为用户授权,这样,用户就不能对数据库进行操作,为保证软件使用功能,我们有必要对数据用户进行限制。如银行管理系统,客户和银行对银行软件系统的访问权限是不同的,客户只能查看自己账户的信息,如存款多少,透支额度,密码修改等权限,不能查看其他客户信息;而银行则可以查看所有的客户基本信息,如客户卡号,开卡时间,卡号是否冻结等权限,却不能更改客户的密码,存款多少,更改存款等权限。可见,给数据库用户授权的重要性,及安全性,它保证了不同用户操作同一数据库的权限。
1)授权语法
grant 权限 [on 表名] to 数据库用户
2)收回权限语法
revoke 权限 [on 表名] to 数据库用户
注明:[]里的内容是限定数据库中数据表,可以不加,不加[]内容表示给数据库中的所有数据表授权,加上[]限定内容,只是对限定的表格授权。
use jjlm
go
grant select,insert,update on Students to jjlmUser01
给表Students授权增、改、查数据操作后,我们使用jjlm登陆账号登陆后,能看见数据库jjlm中的表Students,却看不见其他的数据表,而且在Students表中不能执行删除操作,因为我们没有赋予删除的权限。
use jjlm
go
grant select,insert,update to jjlmUser01
对比两段代码,执行后,代码1只是给Students数据表授权,而代码2没有限定,则给数据库jjlm中所有数据表授权。
3)数据库角色
给用户单独授权非常麻烦,为此我们可以给数据库用户赋予一个对应的“角色”;角色自动给数据库用户相应的权限。使用方便。下面为常用的固定角色。
1.数据库角色
public
--public 角色是一个特殊的数据库角色,每个数据库用户都属于它。public 角色:
--捕获数据库中用户的所有默认权限。
--无法将用户、组或角色指派给它,因为默认情况下它们即属于该角色。
--含在每个数据库中,包括 master、msdb、tempdb、model 和所有用户数据库。
--无法除去。
db_owner
--进行所有数据库角色的活动,以及数据库中的其它维护和配置活动。
--该角色的权限跨越所有其它固定数据库角色。
db_accessadmin
--在数据库中添加或删除 Windows NT 4.0 或 Windows 2000 组和用户以及 SQL Server 用户。
db_datareader
--查看来自数据库中所有用户表的全部数据。
db_datawriter
--添加、更改或删除来自数据库中所有用户表的数据
db_ddladmin
--添加、修改或除去数据库中的对象(运行所有 DDL)
db_securityadmin
--管理 SQL Server 2000 数据库角色的角色和成员,并管理数据库中的语句和对象权限
db_backupoperator
--有备份数据库的权限
db_denydatareader
--拒绝选择数据库数据的权限
db_denydatawriter
--拒绝更改数据库数据的权限
2.添加和删除固定角色的基本语法
exec sp_addrolemember '数据库角色名',‘数据库用户名’
exec sp_droprolemember ‘数据库角色名’,‘数据库用户名’
3.具体代码:
use jjlm
go
exec sp_addrolemember 'db_owner','jjlmUser01'--增加db_owner角色
exec sp_droprolemember 'db_owner','jjlmUser01'--删除角色
可以通过图形界面给指定的用户进行赋权,看起来更直观。
五.补充说明
登陆账号、数据库、数据库用户的关系
登陆账号和数据库用户是一对多的关系,数据库用户和数据库是一对一的关系。一个登陆账号,可以有多个数据库用户,而一个数据库用户只能与一个数据库对应。
Sql Server数据库中的用户及权限配置,保障数据库安全相关推荐
- SQL SERVER数据库中GUEST用户
SQL SERVER数据库中GUEST用户 问题 谁邀请这些客人(guest)到我的数据库中?你可知道在你的SQL SERVER数据库中还存在guest用户?你可知道SQL SERVER 需要gues ...
- mysql raiserror_RAISERROR在SQL Server数据库中的用法
raiserror 是由单词 raise error 组成 raise 增加; 提高; 提升 raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql ser ...
- SQL Server数据库中批量导入数据的四种方法总结
在软件项目实施的时候,数据导入一直是项目人员比较头疼的问题.其实,在SQL Server中集成了很多成批导入数据的方法.有些项目实施顾问头疼的问题,在我们数据库管理员眼中,是小菜一碟.现在的重点就是, ...
- 通过VB向SQL Server数据库中录入数据
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 一.数据录入 通过VB向SQL Se ...
- 如何在SQL Server数据库中加密数据
如何在SQL Server数据库中加密数据 为了防止某些别有用心的人从外部访问数据库,盗取数据库中的用户姓名.密码.信用卡号等其他重要信息,在我们创建数据库驱动的解决方案时,我们首先需要考虑的的第一条 ...
- SQL Server数据库中的T-SQL如果存在语句概述
This article walks through different versions of the T-SQL IF EXISTS statement for the SQL database ...
- SQL Server数据库中批量导入数据
在软件项目实施的时候,数据导入一直是项目人员比较头疼的问题.其实,在SQL Server中集成了很多成批导入数据的方法.有些项目实施顾问头疼的问题,在我们数据库管理员眼中,是小菜一碟.现在的重点就是, ...
- 在ASP.NET中将图片存储到Sql Server数据库中
在ASP.NET中将图片存储到Sql Server数据库中 http://hi.baidu.com/rayshow/blog/item/360e8ff9662c8b5a252df268.html 索引 ...
- 清空SQL Server数据库中所有表数据的方法(转)
清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...
最新文章
- 为什么交叉熵和KL散度在作为损失函数时是近似相等的
- python paramiko模块中设置执行命令超时值
- 正则不等于一个字符串_更正一个观念:“积食”不等于“吃多了”
- 规则引擎Easy-rules
- FastTunnel - 打造人人都能搭建的内网穿透工具
- 解析可变参数函数的实现原理(printf,scanf)
- matlab 排序点,matlab如何进行排序?
- 网易致歉了,是为了员工还是为了舆论压力?
- ntpd时钟同步服务
- flask 启动服务
- 【毕业答辩】论文答辩过不了?做好这几点,再也不用担心自己被“仍论文”
- vue 使用this.reload方法刷新页面配置
- 统计一个子字符串在另一个字符串中出现的次数
- 远程办公:常用的远程协助软件,你都知道吗?
- kali桌面的安装与切换
- 计算机无法加载这个项目,Windows系统中出现无法加载这个硬件的设备驱动程序(代码39)的解决方法介绍 win7...
- Windows 11 (updated Dec 2021) 简体中文版、英文版(64-bit、ARM64)下载(2022 年 1 月发布)
- 支付宝小程序uni-app的map多边形polygons不显示问题解决
- 暗色html模板,暗色个人主页网站模板
- Linux libusb
热门文章
- 奇富科技语音论文入选国际顶会INTERSPEECH 2023
- “中国第一国门”首都机场的新Wi-Fi网:带你智能带你飞
- Zernik矩亚像素边缘检测
- C语言生成随机数和随机数组
- c语言生成随机数不用time,C语言生成随机数的函数、延时函数
- IMX6Q基于yocto 4.9.88系统交叉编译nss-3.73
- Linux内核驱动platform移植问题:failed to claim resource 0
- maching learning入门(三)
- FPGA初探(五)之两位数码管显示
- 通常计算机的存储容量越大性能就越好吗,为什么计算机的内存越大速度越高?...