sqlserver 用户、账号、安全等问题小汇

一、孤立账号

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用户以一组自定义的权限分组;
应用程序角色:用来授予应用程序专门的权限,而非授予用户组或者单独用户。

如果你是蜗牛,那你就不必害怕自己前进的缓慢,相信你自己,因为你的脚步永远不会落空,只要你一步步的向上爬,金字塔也必定被你踩在脚下。
原文地址:https://www.cnblogs.com/lx823706/p/5129654.html