分享自 儒雅的男人blog http://www.cnblogs.com/yushaoye201314/archive/2013/04/19/3031203.html

好文,转载收藏

这两天在调用Microsoft.SqlServer.SMO.dll组件 《add
login,create,backup,restore database to Sql Server using SMO
》,接触到一些数据库的名词定义:登录名,用户,角色,架构,权限,部分新人对几个名词的概念不是很清晰 所以参考部分文档,摘录如下(权当温故⑧^_^):

SqlServer2008的安全机制分为四个级别:

1.操作系统的安全性

  创建操作系统用户账号(win7):

  

2.数据库服务器的登录安全性【下面两种验证模式下登录所使用的用户名,即为:登录名定义。】

  数据库服务器登录模式分为:

  ①Windows身份验证模式(如下图)

  

  用户名即是:当前Windows操作系统中的用户账户,我这里是用的管理员账号(计算机名),如果系统账户有登录密码 可以相应的输入

  登录成功后,设置SqlServer 验证模式如图:

  

  

  ②混合身份验证模式(Windows身份验证模式&SqlServer身份验证模式[前者安全性比后者高]),如下图:

   

  在安装SQLServer2008时 会默认生成一个登录名:sa,其隶属于服务器角色:sysadmin。

  而新创建的登录名,则会自动关联服务器角色:public,除了默认的数据库:master,其他的数据都将没有访问权限,如果想要访问其他数据库:

  1.则需要在登录名-新建-用户映射里面勾选相应的数据库:则相应的数据库会自动创建一个同名(登录名)数据库用户账号

    (注①:master数据库不勾选也是默认访问的 数据库用户里是没有同名账号。)

    (注②:当登录名要删除之前 要先手动删除由登录名映射数据库而生成的用户)

  2.或者在登录名-新建-服务器角色 中直接勾选sysadmin这样就可以访问所有的数据库(或在服务器角色sysadmin-右击属性-添加-登录名)了:修改服务器角色为    sysadmin
不会在数据库用户里创建同名账号。

  以下是数据库服务器的角色列表以及其对应所拥有的操作权限,如下图:

  

3.数据库的使用安全性

  登录名 只能登录进SqlServer服务器,并不能让访问服务器中的数据库,而使用登录名登录进数据库服务器后想要访问特定的数据库 还必须具有数据库用户名,用户名在特定的数据库内创建,并必须关联一个登录名,通过授权给该用户指定可以访问的数据库对象的权限

  数据库用户可以新建或者由登录名映射数据库而生成。注:无论是新建的数据库用户
还是由登录名映射数据库生成的数据库用户 都要遵循 数据库用户1:1登录名的规则

    创建数据库用户时 需要关联登录名;创建数据库角色是 需要关联使用者 一般选择dbo;
dbo(DataBase Owner)是数据库的所有者,拥有数据库中的所有对象,每个数据库都有dbo,sysadmin服务器角色的成员自动映射成dbo,无法删除dbo,且此用户始终出现在每个数据库中。通常 登录名sa映射为数据库用户dbo.

  数据库用户的生成需要关联数据库角色:数据库角色有三种:固定数据库角色,用户定义数据库角色,应用程序角色,如下图:

  

4.数据库对象的使用安全性

  我们一般将表,视图,存储过程,函数 统称为数据库对象,而数据库对象包含在架构中,而给角色划分权限也就是开放架构中部分或者全部的对象做相应的执行权限操作,

  数据库对象的常用权限 如下图:

  

  权限操作分为三种:授予,拒绝,撤销,语法及代码如下

 1 --授予权限操作
2 --语法:Grant {ALL|statement[,,,,n]} TO security_account[,,,n]
3 --授予角色"students_mag"对"studengs"数据库中"stu"表 delete insert update权限
4 use students
5 go
6 grant delete,inster,update
7 on stu
8 to students_msg
9 go
10 --撤销权限操作
11 --语法:revoke {all|statement[,,,n]} from security_account[,,,n]
12 --使用revoke 撤销角色"students_mag"对"studengs"数据库中"stu"表 delete insert update权限
13 use students
14 go
15 revoke delete,insert,update
16 on stu
17 from students_mag CASCADE
18 --拒绝权限操作
19 --deny {all|statement[,,,n]} to security_account[,,,n]
20 --在数据库"students"的"stu"表中执行insert操作的权限授予了public角色,然后拒绝用户guest拥有该项权限
21 use students
22 go
23 grant insert
24 on stu
25 to public
26 go
27 deny insert
28 on stu
29 to guest

  在创建或生成数据库用户时 需要关联架构,由登录名映射数据库生成的数据库用户 默认选择了dbo,手动创建数据库用户,则选择dbo,如下图:

  

  针对数据库设置用户/角色权限,如下图:

  

总结:数据库的安全和权限如下图所示:

操作过程中相关的步骤、用T-SQL语句表示如下:

1.利用系统存储过程sp_addsrvrolemember可将登录名添加到某个固定服务器角色中

  语法:exec sp_addsrvrolemember 'login',''role'

2.利用系统存储过程sp_dropsrvrolemember可从固定服务器角色中删除登录名

  语法:exec sp_dropsrvrolemember 'login','role'

3.利用系统存储过程sp_srvrolepermission可以浏览固定服务器角色的权限

  语法:exec sp_srvrolepermission 'role'

4.使用系统存储过程浏览固定的数据库角色

  语法:exec sp_helpdbfixedrole

5.创建用户自定义数据库角色

  语法:create role role_name [authorization owner_name]    role_name:将要创建的数据库角色名  owner_name:该角色拥有者的名字,必须是当前数据库里的用户或角色,默认为dbo

  T-Sql:create role 'myRole'

      使用存储过程sp_addrolemember给新建数据库角色设置已经存在的数据库角色功能exec sp_addrolemember 'db_datareader','myRole'

      使用存储过程sp_droprolemember撤销给新建数据库角色所设置的已存在数据库角色的功能exec sp_droprolemember 'db_datareader','myRole'

  Proc示例:exec sp_addrole 'testRole','dbo'

5.1.删除用户自定义数据库角色

  语法:drop role testRole

  proc:exec sp_droprole 'testRole'

6.创建数据库服务器登录名

  T-Sql:create LOGIN lisi with password='111111'

  Proc :exec sp_addlogin 'lisi' [,'111111' [,'master']]

7.修改登录名 名称和密码

  alter login lisi with name=lisi_new

  alter login lisi_new with password='abcdef'

8.删除登录名

  T-Sql:drop login lisi_new

  Proc :exec sp_droplogin 'lisi_new'

8.1.禁用登录名

  alter login lisi_new disable

8.2.启用登录名

  alter login lisi_new enable

9.创建数据库用户

  T-Sql语法:create user user_name {for|from} login login_name

  示例:use Sales go  create user myUser from login lisi_new

9.1.创建带有默认架构的数据库用户

  语法:use Sales go

      create user myUser from login lisi_new with default_schema=HRmanager

10.使用存储过程sp_helpuser查看数据库用户

11.删除数据库用户

  T-Sql:drop user user_name

  Proc :exec sp_dropuser 'user_name'

12.使用存储过程sp_addrolemember给数据库用户设置固定数据库角色功能

  语法:exec sp_addrolemember 'role','security_account'

  示例:exec sp_addrolemember 'db_datareader','myUser'

13.使用存储过程sp_droprolemember撤销给数据库用户所设置的固定数据库角色功能

  语法:exec sp_droprolemember 'role','security_account'

  示例:exec sp_droprolemember 'db_datareader','myUser'

总结:关于数据库服务器级的角色管理 与 数据库级角色管理 如下图

  


SqlServer2008基础知识:安全与权限的更多相关文章

  1. Linux基础知识之文件的权限(一)

    Linux基础知识之文件权限(一) Linux优点之一就是它拥有多用户多任务的环境,在提供文件共享的同时也能保证用户文件的安全性.所以,设置文件的权限管理变得尤为重要. 权限讲解 [der@Der ~ ...

  2. Windows权限提升基础知识和命令

    介绍 这篇文章是介绍window的权限提升,虽然不是一个全面的指南,但会试图覆盖主要的技术,常用的资源列表在文章底部,可供大家参考. window权限提升基础知识 初始信息收集 在开始提权之前,我们需 ...

  3. Linux基础知识第七讲,用户权限以及用户操作命令

    目录 Linux基础知识第七讲,用户权限以及用户操作命令 一丶简介linux用户,用户权限,组的概念. 1.1 基本概念 1.2 组 1.3 ls命令查看权限. 二丶用户权限修改命令 1.chmod ...

  4. Linux基础知识之用户和用户组以及 Linux 权限管理

    已经开始接触Linux用户管理,用户组管理,以及权限管理这几个逼格满满的关键字.这几个关键字对于前端程序猿的我来说真的是很高大上有木有,以前尝试学 Linux 的时候看到这些名词总是下意识的跳过不敢看 ...

  5. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  6. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

  7. Oracle数据库基础知识

    oracle数据库plsql developer   目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...

  8. Linux基础知识整理

    一.基础知识 1.Linux简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件 ...

  9. linux基础知识与技能2

    3.编辑器vi的使用(vi和vim的联系)什么是编辑器?编辑器就是一款软件,它的主要作用就是用来编辑.譬如编写文件,编写代码.Windows中的常用编辑器,如自带的notepad.比较好用的notep ...

随机推荐

  1. DLL封装Interface(接口)(D2007+win764位)

    相关资料: http://blog.csdn.net/liangpei2008/article/details/5394911 结果注意: 1.函数的传参方向必须一至. DLL实例代码: ZJQInt ...

  2. Mongodb 的常用方法,在可视化工具执行

    查询: db.getCollection('message').find({"userId":"31257"}) 查询总数: db.getCollection( ...

  3. 关于dubbo的provider和consumer都配置timeout超时时间的情况

    本文转自:http://blog.csdn.net/lkforce/article/details/54380201 前言 在dubbo的provider和consumer的配置文件中,如果都配置了t ...

  4. TED Notes 1 (What leads to success)

    1. the first thing is passion, do it for love, not for money2. if you do it for love, the money come ...

  5. PTS无法同步

    最近在使用PTS的时候,一直重现PTS无法同步的情况,一直显示No block source available,在查了中英各种帖子之后,终于解决了这个问题,下面是解决的办法. 在windows下运行 ...

  6. opencv 中affine函数实现旋转和平移

    图像旋转和平移是图像处理中常用的一种操作,opencv2和opencv3中对图像的旋转和平移都是通过仿射变换函数cv::warpAffine()来实现的. 1.图像的旋转 图像的旋转具体实现分为两步: ...

  7. 使用SoapUI 对WebService压力测试

    SoapUI版本:5.0.0 测试步骤: 1.新建测试项目: 2.生成TestSuite以及LoadTest 以上操作完成以后项目如下: 开始测试: 双击LoadTest1,如下图: 点击左上角绿色三 ...

  8. WIN7或者WIN8上边框的异常问题的解决攻略

    //主要两个步骤://第一个步骤就是在CMainFrame::OnCreate里面增加 HINSTANCE hInst = LoadLibrary(_T("UxTheme.dll" ...

  9. 微信怎样做SEO

    微信也能做SEO.大家还不知道吧?今天上海SEO优化公司就和大家解说在微信上要怎么做SEO优化. 微信也有SEO?你会不会觉得我是说笑呢.事实上还就是.我也找不到什么好名词来介绍公众号上的排名,就用微 ...

  10. mysql lower_case_table_names 区分表名大小写设置

    Command-Line Format --lower-case-table-names[=#] System Variable Name lower_case_table_names Variabl ...