一、孤立账号

SQL Server 的用户安全管理分两层,整个SQL Server 服务器一层,每个数据库一层。

  • 在服务器层的帐号,叫登录账户(SQL Server:服务器角色),可以设置它管理整个SQL Server服务器(开启跟踪,修改 Sql Server 安全配置,备份所有数据库等)。
  • 在数据库一层,叫数据库账户(SQL Server:数据库角色),可以设置它对这个特定的数据库有读写、修改表结构、存储过程定义等权限。

登录帐号对于服务器而言的,数据库用户是针对特定数据库来讲的。就相当于一个房间里放着很多保险柜,你有房门钥匙了,必须得有每个保险柜的钥匙才能从保险柜里取东西。登录帐户是房门钥匙,数据库用户是保险柜钥匙。

所谓孤立用户即指在服务器实例上未定义或错误定义了其相应 SQL Server 登录名的数据库用户无法登录到实例。 这样的用户被称为此服务器实例上的数据库的“孤立用户”。 如果删除了对应的 SQL Server 登录名,则数据库用户可能会变为孤立用户。 另外,在数据库还原或附加到 SQL Server 的其他实例之后,数据库用户也可能变为孤立用户。 如果未在新服务器实例中提供数据库用户映射到的 SID,则该用户可能变为孤立用户。

二、如何解决孤立账号

解决孤立账户实质上就是建立一个“登陆账户”,并关联“登陆账户”和“数据库账户”(主要是依靠登录账号的sid)。

A)、当数据库非只读的情况下(未配置Always On 高可用时):

建立一个登陆账户(一般与孤立账户同名,即“cms”),先不设置该“登陆账户”的数据库访问和数据角色,并设置该“登陆账户”的密码(一般也与孤立账户相同),然后连接“登陆账户”和“数据库账户”。

Use A
exec sp_change_users_login 'update_one', 'cms', 'cms'
这样在执行“exec sp_change_users_login 'report'”就不会看到孤立账户“cms”了。

sp_change_users_login的语法

exec sp_change_users_login 'update_one', '登陆账户名', '数据库账户名'
注意:“登陆账户”的账户名和密码都可以和“孤立账户”不同,应用程序的数据库配置应当为“登陆账户”的账户名和密码,而不是“数据库账户”。

B)、当数据库只读的情况下(配置Always On 高可用时):

查看主副本库上的登录用户的sid

  1. use master
  2. select * from sys.sql_logins

之后,在辅副本库上创建新的登录用账号,其名称和密码与数据库用户一致

  1. USE [master]
  2. GO
  3. CREATE LOGIN [lx] WITH PASSWORD=N'xxxxx',
  4. sid = 0xxxxxxx ,
    -- sid 与主副本库上对应的登录名的sid相同
  5. DEFAULT_DATABASE=[master],
  6. CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
  7. GO

如此,主辅副本上的登录用户的映射关系全部一致,孤立用户问题解决,此方法通用。

三、数据库账号对数据库中表的权限的设置

a)、若配置有Always On高可用组时,需要在主副本库上进行操作,选择要操作的库。

b)、注意选择的时候 成员身份、安全对象 之间权限的优先级别,其中安全对象优先级最高。

c)、选择相关的操作对象 (数据库、表、视图等),

d)、若是选择的是表,注意各列之间的权限授予。

对于登录名来说,可以选择其是否成为某个固定服务器角色的成员
按照从最低级别的角色(bulkadmin)到最高级别的角色(sysadmin)的顺序进行描述:

  Bulkadmin:这个服务器角色的成员可以运行BULK INSERT语句。这条语句允许从文本文件中将数据导入到SQL Server 2008数据库中,为需要执行大容量插入到数据库的域账户而设计。
  Dbcreator:这个服务器角色的成员可以创建、更改、删除和还原任何数据库。这不仅是适合助理DBA的角色,也可能是适合开发人员的角色。
  Diskadmin:这个服务器角色用于管理磁盘文件,比如镜像数据库和添加备份设备。它适合助理DBA。
  Processadmin:SQL Server 2008能够多任务化,也就是说可以通过执行多个进程做多个事件。例如,SQL Server 2008可以生成一个进程用于向高速缓存写数据,同时生成另一个进程用于从高速缓存中读取          数据。这个角色的成员可以结束(在SQL Server 2008中称为删除)进程。
  Securityadmin:这个服务器角色的成员将管理登录名及其属性。他们可以授权、拒绝和撤销服务器级权限。也可以授权、拒绝和撤销数据库级权限。另外,它们可以重置SQL Server 2008登录名的密码。
  Serveradmin:这个服务器角色的成员可以更改服务器范围的配置选项和关闭服务器。例如SQL Server 2008可以使用多大内存或监视通过网络发送多少信息,或者关闭服务器,这个角色可以减轻管理员的一些管          理负担。
  Setupadmin:为需要管理链接服务器和控制启动的存储过程的用户而设计。这个角色的成员能添加到setupadmin,能增加、删除和配置链接服务器,并能控制启动过程。
  Sysadmin:这个服务器角色的成员有权在SQL Server 2008中执行任何任务。
  Public:有两大特点,第一,初始状态时没有权限;第二,所有的数据库用户都是它的成员

数据库级别的角色名称说明:
 
  db_owner 固定数据库角色的成员可以执行数据库的所有配置和维护活动,还可以删除数据库。
 
  db_securityadmin 固定数据库角色的成员可以修改角色成员身份和管理权限。向此角色中添加主体可能会导致意外的权限升级。
 
  db_accessadmin 固定数据库角色的成员可以为 Windows 登录名、Windows 组和 SQL Server 登录名添加或删除数据库访问权限。
 
  db_backupoperator 固定数据库角色的成员可以备份数据库。
 
  db_ddladmin 固定数据库角色的成员可以在数据库中运行任何数据定义语言 (DDL) 命令。
 
  db_datawriter 固定数据库角色的成员可以在所有用户表中添加、删除或更改数据。
 
  db_datareader 固定数据库角色的成员可以从所有用户表中读取所有数据。
 
  db_denydatawriter 固定数据库角色的成员不能添加、修改或删除数据库内用户表中的任何数据。
 
  db_denydatareader 固定数据库角色的成员不能读取数据库内用户表中的任何数据。
 
四、安全性问题

安全性是所有数据库管理系统的一个重要特征。理解安全性问题是理解数据库管理系统安全性机制的前提。

1.第一个安全性问题:当用户登录数据库系统时,如何确保只有合法的用户才能登录到系统中?这是一个最基本的安全性问题,也是数据库管理系统提供的基本功能。

在Microsoft SQL Server 2008系统中,通过身份验证模式和主体解决这个问题。

1)身份验证模式

Microsoft SQL Server 2008系统提供了两种身份验证模式:Windows身份验证模式和混合模式。

Windows身份验证模式:

在该模式中,用户通过Windows用户账户连接SQL Server时,使用Windows操作系统中的账户名和密码。

混合模式:

在混合模式中,当客户端连接到服务器时,既可能采取Windows身份验证,也可能采取SQL Server身份验证。

主体是可以请求系统资源的个体或组合过程。例如,数据库用户是一种主体,可以按照自己的权限在数据库中执行操作和使用相应的数据。

下列几张图有助于梳理思路:

Microsoft SQL Server 系统有多种不同的主体,不同主体之间的关系是典型的层次结构关系,位于不同层次上的主体其在系统中影响的范围也不同。位于层次比较高的主体,其作用范围比较大;位于层次比较低的主体,其作用范围比较小。

当用户登录到系统中,他可以执行哪些操作、使用哪些对象和资源?

在Microsoft SQL Server 系统中,通过安全对象和权限设置来解决这个问题

第三个安全性问题:数据库中的对象由谁所有?如果是由用户所有,那么当用户被删除时,其所拥有的对象怎么办?

在Microsoft SQL Server 系统中,这个问题是通过用户和架构分离来解决的

安全机制的5个等级:

客户机安全机制
网络传输的安全机制
实例级别安全机制
数据库级别安全机制
对象级别安全机制

五、角色

1.固定服务器角色

固定服务器角色是服务器级别的主体,它们的作用范围是整个服务器。
固定服务器角色已经具备了执行指定操作的权限,可以把其他登录名作为成员添加到固定服务器角色中,这样该登录名可以继承固定服务器角色的权限。
固定服务器角色的特点

在Microsoft SQL Server系统中,可以把登录名添加到固定服务器角色中,使登录名作为固定服务器角色的成员继承固定服务器角色的权限。

2.数据库角色

三种类型的数据库角色:

固定数据库角色:微软提供的作为系统一部分的角色;
用户定义的标准数据库角色:你自己定义的角色,将Windows用户以一组自定义的权限分组;
应用程序角色:用来授予应用程序专门的权限,而非授予用户组或者单独用户。

sqlserver 用户、账号、安全等问题小汇的更多相关文章

  1. SqlServer 复制中将大事务分成小事务分发

    原文:SqlServer 复制中将大事务分成小事务分发 在sql server 复制中,当在发布数据库执行1个大事务时,如一次性操作 十万或百万以上的数据.当操作数据在发布数据库执行完成后 ,日志读取 ...

  2. DBCC常用命令小汇

    DBCC是SQL Server提供的一组控制台命令,功能很强大,掌握一些必要的语句,对操作数据库有不少帮助,所以决定整理一下,发现已有不少类似的整理,减少了不少工作,归类如下: 一.DBCC 帮助类命 ...

  3. sql server 常用的函数小汇

    摘录些许sqlserver 常用到的一些函数,便于日常学习使用 一.字符转换函数1.ASCII()返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用‘’括起来,但 ...

  4. 简单统计SQLSERVER用户数据表大小(包括记录总数和空间占用情况)

    在SQLSERVER,简单的组合sp_spaceused和sp_MSforeachtable这两个存储过程,可以方便的统计出用户数据表的大小,包括记录总数和空间占用情况,非常实用,在SqlServer ...

  5. SQLServer —— 用户权限操作

    说明 以下操作都是基于SQLServer登陆验证方式登陆.而且操作员都是 sa. 一.添加登陆账号 use master go ' 第一个(xu)是登陆名,第二个(123456)是登陆密码. 执行语句 ...

  6. iOS开发的知名大牛博客小汇

    王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒.http://onevcat ...

  7. 新手sqlserver数据库dba需要注意的小细节

    前言:任何的优化和修改都是以业务情况为前提,可能有的写的有误或者不准确的地方,欢迎各位来拍砖. 1.在创建db的时候自增长建议设置成按MB(M)增长,步长根据业务量来设置,一般情况建议设置100-20 ...

  8. sqlserver 用户定义表类型

    有时需要将内存中的表与数据库中的表比较,比如Datatable中有100行数据,需要判断在数据库中是否存在,这个时候我们就可以使用sqlserver中的[用户 定义表类型] 这里最最最重要的思路是把[ ...

  9. sqlServer sa账号被锁定

    alter login sa with password = '123'  unlock, check_policy = off, check_expiration = off    一切搞定.. 1 ...

随机推荐

  1. DOM的相关优化

    为什么要进行DOM优化? DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为,比如布局(layout)和绘制(paint). 首先先说一些 ...

  2. js刷新页面的几种方法

    history.go(0) location.reload() location=location location.assign(location) document.execCommand('Re ...

  3. ubuntu 出现g++ : Depends: g++-4.8 (>= 4.8.2-5~) but it is not going to be installed

    Ubuntu 你可以安装搜狗输入法也可以使用sunpingyin,看个人爱好. 唯一要注意的是,不能把系统的更新关了,否则会出现一大堆的问题,连g++都无法安装. 在设置里面: 我以前有一个很不好的习 ...

  4. CodeVS 2845 排序的代价

    Description 给你一个数列使他递增,交换两个元素的代价为两个数的和,最小化代价. Sol 置换群+离散化. 使一个数列恢复递增顺序,那么,他和他要到达的位置的数需要交换,这样就形成了一个置换 ...

  5. java的ArrayList使用方法

    在第N个数据后面添加一个数据 用法: 在第1个元素后面添加E list.add(1, "E");

  6. 3.5---用栈实现队列(CC150)

    手写时候,别忘记import java.util.Stack; import java.util.Stack; class MyQueue { Stack<Integer> s1 = ne ...

  7. 应用HTK搭建语音拨号系统3:创建绑定状态的三音素HMM模型

    选自:http://maotong.blog.hexun.com/6261873_d.html 苏统华 哈尔滨工业大学人工智能研究室 2006年10月30日 声明:版权所有,转载请注明作者和来源 该系 ...

  8. 基于用户相似性的协同过滤——Python实现

    代码基本来自项亮的<推荐系统实践>,把书上的伪代码具体实现,还参考了https://www.douban.com/note/336280497/ 还可以加入对用户相似性的归一化操作,效果会 ...

  9. Sublime Text编辑工具带有 PEP 8 格式检测插件

    Sublime Text编辑工具带有 PEP 8 格式检测插件

  10. 【转】ArrayList其实就那么一回事儿之源码浅析

    转自:http://www.cnblogs.com/dongying/p/4013271.html?utm_source=tuicool&utm_medium=referral ArrayLi ...