一、孤立账号

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

use master
select * from sys.sql_logins

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

USE [master]
GO
CREATE LOGIN [lx] WITH PASSWORD=N'xxxxx',
sid = 0xxxxxxx ,
-- sid 与主副本库上对应的登录名的sid相同
DEFAULT_DATABASE=[master],
CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
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. hiho #1318 非法二进制数

    #1318 : 非法二进制数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 如果一个二进制数包含连续的两个1,我们就称这个二进制数是非法的. 小Hi想知道在所有 n 位 ...

  2. C++笔试题(转)

    http://blog.csdn.net/hxz_qlh/article/details/16864567 这里面列举的题考察的东西都非常细,包括strcpy,字符串,大.小端的判断,很容易犯错,值得 ...

  3. MikroTik RouterOS防火墙与过滤详解

    MikroTik RouterOS能对包状态过滤:P2P协议过滤:源和目标NAT:对源MAC.IP地址.端口.IP协议.协议(ICMP.TCP.MSS等).接口.对内部的数据包和连接作标记.ToS 字 ...

  4. BZOJ 2685: Sgu385 highlander

    Sol 期望DP. \(f[i][j][k]\) 表示已经确定了 \(i\) 个点, 最大环大小为 \(j\) ,个数为 \(k\) 的方案数. 转移非常复杂,因为细节特别多. \(f[i][j][1 ...

  5. GCD-Grand Central Dispatch

    经常要用的,总结分类一下. //获得队列 DISPATCH_QUEUE_PRIORTY 优先级 dispatch_queue_t Queue = dispatch_get_global_queue(D ...

  6. phpcms 无法显示缩略图 Call to undefined function image_type_to_extension

    问题背景: 线下的phpcms项目没问题,线上的phpcms新添加的图片缩略图显示有问题,查看了一下php版本,线下是5.5的,线上的是5.1的 问题原因: 看了一下线上的错误日志,显示: PHP F ...

  7. javascript特殊运算符

    in运算符                 in运算符要求其左边的运算数是一个字符串,或可以被转换为字符串,右边的运算数十一个对象或数组.如果该 运算符左边的值是右边对象的一个属性名,则返回true, ...

  8. mysql性能优化学习笔记-参数介绍及优化建议

    MySQL服务器参数介绍 mysql参数介绍(客户端中执行),尽量只修改session级别的参数. 全局参数(新连接的session才会生效,原有已经连接的session不生效) set global ...

  9. zpf 获取表单等数据的用法

    2015年4月12日 12:25:35 星期日 zpf框架中获取表单数据的方法 //获得get,post,url中的数据 private function setData() { $this-> ...

  10. C# 反射+抽象工厂模式

    此模式可以很好的更换程序使用不同的数据库 1.用到的属性类 using System; using System.Collections.Generic; using System.Linq; usi ...