一.登陆界面引入

下图为SQL Server的登陆界面。

1)服务器名称:“.”代表本地计算机,选择下拉框,可以看见还有一个与本机机名相同的内容,也代表于本地服务器连接;要连接远程服务器的话,在此处填写远程IP地址;

2)身份验证:身份验证下拉框内容为”Windows 身份验证“和 ”SQLServer 身份验证“两种登陆方式,这就是登陆账户。

  ”Windows 身份验证“:适合于Windows平台用户,不需要提供密码和Windows集成验证;

  ”SQLServer 身份验证“:适合于非Windows平台用户或Internet用户,需要提供登陆账号和登陆密码;账号sa就属于该种登陆账户,是一个超级管理员登陆账号。

3)sa登陆账号

  sa是一个超级登陆账号,我们使用他后,可以看见数据库服务器中的所有数据库,及各数据库中所有的表,拥有着管理数据库服务器的所有权限,刚学习.net程序开发的时候,应用程序,会使用该账号连接数据库,因为该账号的特殊性,使得我们在开发程序时,使用该账号,对数据库安全性极其不安全(因为可以看到所有的数据库,数据表,并能对数据库进行增删改操作)。为此,在程序开发中,有必要通过添加新的登陆账号,添加对应的数据库用户,并对数据库用户设置不同的权限,以保证数据库及数据的安全性。

  下面内容主要说明怎样创建登陆账号,创建数据库用户,及对数据库用户授予权限。

二.登陆账号添加与删除

  1)登陆账号添加

  1.创建Windows 登陆账户,  语法: exec sp_grantlogin '登陆账号'

use master
go
exec sp_grantlogin 'LAPTOP-R1U6PBGI\xiaoming'
--LAPTOP-R1U6PBGI代表本机机器名,xiaoming代表该电脑的一个用户名,这个账号可以通过"计算机管理"中的"本地用户和组"来为该电脑添加用户,并设置对本电脑操作权限

  2.创建SQL Server登陆账户, 语法: exec sp_addlogin '登陆账号',‘登陆密码’

use master
go
exec sp_addlogin 'xiaoming',''

执行代码后,在数据库客户端会显示这两个登陆账号,如下图所示

  2)删除登陆账户,语法:exec sp_droplogin '登陆账号'

use master
go
exec sp_droplogin 'LAPTOP-R1U6PBGI\xiaoming'

  用新创建的登陆账号登陆SQL server客户端后(没有为其添加数据库用户和权限),点击里面的数据库发现SQL server客户端报以下提示

  并且[安全性]里的[登陆名]与sa账号里的内容不同,只有'sa'和刚刚创建的'xiaoming'账号

备注:

  使用刚创建的登陆账号登陆客户端,在没有为其设置数据库用户的时候,只能看见里面有的数据库,不能打开数据库,更不能查看其中的数据表,不能执行SQL语句的查询.

三.数据库用户

  1)创建数据库用户

  指定为哪个数据库添加数据库用户,基本语法:exec sp_grantbaccess  '登陆账户名','数据库用户名'

use SMDB--为数据库SMDB创建数据库用户名
go
exec sp_grantdbaccess 'xiaoming','xiaomingUser01'

  创建登陆账户都是在master数据库下执行的,而数据库用户名是为具体的数据库内创建,所有使用 use SMDB go 语法指向SMDB数据库,调用系统存储过程sp_grantdbaccess 创建名为xiaomingUser01的用户名,其登陆账号名为xiaoming。

  下图可以看见,数据库SMDB中的安全性里的用户已有xiaomingUser01用户名

  从上图还可以看见,dbo数据库用户名,它表示数据库的所有者(DB Owner)。可以对数据库和其对象进行所有的管理工作,拥有数据库操作的所有权限。我们无法删除dbo用户,此用户出现每个数据库中,默认分配给sa登陆账号,所以sa登陆账号可以访问所有的数据库。

  2)删除数据库用户

  同样是在具体的数据库中执行删除,而非master数据库中执行

  语法: exec sp_dropuser '数据库用户名'

use SMDB
go
exec sp_dropuser 'xiaomingUser01';

四.给数据库用户授权

  为数据库创建完数据库用户名后,使用xiaoming登陆账号登陆客户端后,发现我们只能打开数据库SMDB,其他数据库同样无法打开,打开SMDB数据后,发现‘表’中内容为空,没有数据表,这是为何?因为我们还没有为用户授权,这样,用户就不能对数据库进行操作,为保证软件使用功能,我们有必要对数据用户进行限制。如银行管理系统,客户和银行对银行软件系统的访问权限是不同的,客户只能查看自己账户的信息,如存款多少,透支额度,密码修改等权限,不能查看其他客户信息;而银行则可以查看所有的客户基本信息,如客户卡号,开卡时间,卡号是否冻结等权限,却不能更改客户的密码,存款多少,更改存款等权限。可见,给数据库用户授权的重要性,及安全性,它保证了不同用户操作同一数据库的权限。

  1)授权语法

  grant 权限 [on 表名] to 数据库用户

  2)收回权限语法

  revoke 权限 [on 表名] to 数据库用户

注明:[]里的内容是限定数据库中数据表,可以不加,不加[]内容表示给数据库中的所有数据表授权,加上[]限定内容,只是对限定的表格授权。

use SMDB
go
grant select,insert,update on Students to xiaomingUser01

  给表Students授权增、改、查数据操作后,我们使用xiaoming登陆账号登陆后,能看见数据库SMDB中的表Students,却看不见其他的数据表,而且在Students表中不能执行删除操作,因为我们没有赋予删除的权限。

use SMDB
go
grant select,insert,update to xiaomingUser01

  对比两段代码,执行后,代码1只是给Students数据表授权,而代码2没有限定,则给数据库SMDB中所有数据表授权。

  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 SMDB
go
exec sp_addrolemember 'db_owner','xiaomingUser01'--增加db_owner角色
exec sp_droprolemember 'db_owner','xiaomingUser01'--删除角色

五.补充说明

  登陆账号和数据库及数据库用户的关系

  登陆账号和数据库用户是一对多的关系,数据库用户和数据库是一对一的关系。一个登陆账号,可以有多个数据库用户,而一个数据库用户只能与一个数据库对应。


说明:

  以上内容为本人学习过程中整理,可能有知识点不全,或理解不足之处,请大家多多留言指教。

SQLServer数据库权限设置--保障数据库安全的更多相关文章

  1. Sitecore 8.2 数据库权限设置

    在我的一个项目中,客户决定改变基础设施.在这个过程中,我得到了一些新的东西需要学习.在本文中,我将分享有关Sitecore数据库权限的经验. 在将数据库从一个服务器移动到另一个服务器时,您需要检查提供 ...

  2. 13-Mysql数据库----权限设置

    权限管理 我们知道我们的最高权限管理者是root用户,它拥有着最高的权限操作.包括select.update.delete.update.grant等操作.那么一般情况在公司之后DBA工程师会创建一个 ...

  3. Mac 配置java版本 ---- MySql数据库权限设置 --- openfire

    java -version 显示java 版本 sudo su - root 切换身份 cd /usr/local/openfire 进入openfire目录 cd bin/ 进入 bin vim o ...

  4. 设置SQLServer数据库中某些表为只读的多种方法

    原文:设置SQLServer数据库中某些表为只读的多种方法 翻译自:http://www.mssqltips.com/sqlservertip/2711/different-ways-to-make- ...

  5. SQLSERVER 数据库性能的的基本 MVC + EF + Bootstrap 2 权限管理

    SQLSERVER 数据库性能的基本 很久没有写文章了,在系统正式上线之前,DBA一般都要测试一下服务器的性能 比如你有很多的服务器,有些做web服务器,有些做缓存服务器,有些做文件服务器,有些做数据 ...

  6. 【SQLSERVER】如何设置权限用户

    一.设置权限用户的意义 SQLSERVER 数据库有两个登录方式,一个是 Windows 身份验证方式 ,另一个是 SQLSERVER 身份验证方式(sa用户): 1, Windows 身份验证方式, ...

  7. mysql用户权限设置,远程访问设置、设置固定ip远程访问,设置root用户不能远程访问mysql数据库

    关于mysql的用户管理,笔记   1.创建新用户 通过root用户登录之后创建 >> grant all privileges on *.* to testuser@localhost ...

  8. 设置SQLServer数据库内存

    需要设置SQLServer数据库的内存配置.登录数据库,这里使用的是SQLServer2008,右键点击最上方的服务器名,在弹出的菜单中,点击属性] 打开服务器属性窗口.默认显示的是第一项[常规]内容 ...

  9. mysql数据库安装、启动及权限设置

    1. 安装需安装mysql客户端和服务器端. Centos下,可用命令:yum install mysql安装mysql客户端:使用命令:yum install mysql-server安装mysql ...

随机推荐

  1. Codeforces 486D Valid Sets:Tree dp【n遍O(n)的dp】

    题目链接:http://codeforces.com/problemset/problem/486/D 题意: 给你一棵树,n个节点,每个节点的点权为a[i]. 问你有多少个连通子图,使得子图中的ma ...

  2. spring boot: 在maven中装入springframework框架

    1.在maven 的pom.xml中加入 <dependency> <groupId>org.springframework</groupId> <artif ...

  3. 造成segmentation fault的可能原因分析

    一 造成segment fault,产生core dump的可能原因 1.内存访问越界 a) 由于使用错误的下标,导致数组访问越界 b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串 ...

  4. python UDP CS demo

    UDP Communication Contents UDP Communication Sending Receiving Using UDP for e.g. File Transfers Mul ...

  5. Vue2.0 探索之路——vuex入门教程和思考

    Vuex是什么 首先对于vuex是什么,我先引用下官方的解释. Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可 ...

  6. 解编码框架的比较(protobuf,thrift,Marshalling,xml)

    1.ProtoBuf 特点: 1.结构化数据存储格式 2.高效的解编码性能. 3.语言无关,平台无关,扩展性好. 4.官方支持java,c++,python三种语言. 5.性能比较好 (与之对比xml ...

  7. 2018.5.29 从layout 到 PCBA

    1 Gerber 这个网上有现成的教程:(不要写网上能找到的资料-敏捷开发) AD 导出Gerber :https://jingyan.baidu.com/article/3c48dd3494181c ...

  8. 每天一个linux命令(12):nl命令

    版权声明更新:2017-05-16博主:LuckyAlan联系:liuwenvip163@163.com声明:吃水不忘挖井人,转载请注明出处! 1 文章介绍 本文介绍了Linux下面的mv命令. 2. ...

  9. 立方体贴图(Cubemap)

    http://blog.csdn.net/asdjy123/article/details/51190643 点击打开链接 好东西保存方便查看 立方体贴图(Cubemap) 原文 Cubemaps 作 ...

  10. Java如何调用dll

    -----------------------------前置条件------------------------------------- 1. 首先有testdll.dll 2. 需要testdl ...