与SQL SERVER 安全控制相关的几点说明.docx

上传人:b****1 文档编号:14686367 上传时间:2023-06-26 格式:DOCX 页数:18 大小:187.29KB
下载 相关 举报
与SQL SERVER 安全控制相关的几点说明.docx_第1页
第1页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第2页
第2页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第3页
第3页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第4页
第4页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第5页
第5页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第6页
第6页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第7页
第7页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第8页
第8页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第9页
第9页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第10页
第10页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第11页
第11页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第12页
第12页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第13页
第13页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第14页
第14页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第15页
第15页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第16页
第16页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第17页
第17页 / 共18页
与SQL SERVER 安全控制相关的几点说明.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

与SQL SERVER 安全控制相关的几点说明.docx

《与SQL SERVER 安全控制相关的几点说明.docx》由会员分享,可在线阅读,更多相关《与SQL SERVER 安全控制相关的几点说明.docx(18页珍藏版)》请在冰点文库上搜索。

与SQL SERVER 安全控制相关的几点说明.docx

与SQLSERVER安全控制相关的几点说明

与SQLSERVER安全控制相关的几点说明

(一)几个基本术语

身份验证(Authentication)是指通过提交服务器评估的凭据以登录到主体请求访问的SQLServer的过程。

身份验证可以确定接受身份验证的用户或进程的标识。

用户、账户、账号、登录名、[数据库]用户名

用户是指能够在SQLServer安全机制下,访问数据库对象中的数据的操作员或客户。

用户若要访问数据库对象,必须获得数据库管理员(DBA)分配的账号和密码。

从SQLServer管理系统的角度来看,用户就是一组匹配的账户和密码。

账户和账号是一个概念的不同说法,在服务器中的账户又叫登录名(LoginName),因此访问服务器也称为登录服务器。

服务器的登录名可以映射到数据库中成为[数据库]用户名(UserName)。

一个登录名可以映射多个数据库用户,而一个用户只能映射一个登录名。

连接或登录SQLServer服务器时是用的登录名而非用户名登录的,程序里面的连接字符串中的用户名也是指登录名。

通常用户名与登录名相同(不是强制相同,但为了一目了然通常都在创建用户名时使用与登录名相同的名字)。

提示:

登录名(LoginName)和用户名(UserName)是两个不同的概念:

登录名:

服务器方的一个实体,登录名只能进入SQLServer服务器,但是不能让用户访问服务器中的数据库资源。

用户名:

一个或多个登录对象在数据库中的映射,可以对用户对象进行授权,以便为登录对象提供对数据库的访问权限。

登录名作用于它所在的服务器。

每个登录名的定义存放在master系统数据库的syslogins表中。

用户名作用于它所在的数据库。

用户定义信息存放在每个数据库的sysusers表中。

用登录名登录到SQLServer后,在访问操作各个数据库时,SQLServer会自动查询此数据库中是否存在与此登录名关联的用户名,若存在就使用此用户的权限访问此数据库,若不存在就是用guest用户访问此数据库(guest是一个特殊的用户名,后面会讲到)。

SQL身份验证:

适合于非windows平台的用户或Internet用户,需要提供账户和密码。

Windows身份验证:

适合于windows平台用户,利用Windows账户和windows集成验证,不需要提供密码。

用户想要操作数据库的某个对象(如某张表)需要过三关:

第一关:

我们需要登录到SQLServer系统,即需要登录账户;

第二关:

我们需要访问某个数据库,即需要该数据库的用户账户;

第三关:

我们需要访问数据库中的某个对象(如某张表),需要有该对象的权限。

主体(principal)是可被授予对安全资源的访问权限的实体(例如登录名、用户、进程、组或角色)。

主体可以是主体的集合(比如数据库角色或Windows组)或不可分割的主体(比如本地登录或域登录)。

每个主体都具有一个ID(identification)和一个安全ID(SID)。

⊙Windows级别的主体:

Windows组、Windows域登录名、Windows本地登录名。

⊙SQLServer级的主体:

服务器角色、SQLServer登录名。

⊙数据库级的主体:

数据库角色、数据库用户、应用程序角色。

上下文切换(contextswitch),更改检查执行语句或执行操作的权限时所依据的标识。

服务器(server)

1)指安装了SQLSERVER的计算机。

2)指SQLServer实例——计算机上运行的SQLServer的副本。

3)指为用户提供服务的计算机软件或组件。

需要根据上下文理解。

注册服务器

注册服务器使您可以存储服务器连接信息(服务器的类型、服务器的名称、登录到服务器时使用的身份验证的类型等),以供将来连接时使用——下次连接该服务器时,不需要重新输入登录信息。

SQLServer2000在SQLServer企业管理器中注册服务器,才能使用SQLServer企业管理器来管理这些服务器。

从SQLServer2005始,在SQLServerManagementStudio中注册服务器,才能使用SQLServerManagementStudio来管理这些服务器。

在MicrosoftSQLServer中,可以注册以下类型的服务器:

SQLServer数据库引擎、AnalysisServices、ReportingServices、IntegrationServices和SQLServerCompact3.5SP1。

 

(二)SQLServer实例(SQLServerinstance)

SQLServer实例(SQLServerinstance),简称实例(instance),是计算机上运行的SQLServer的副本。

同一台计算机上可以安装运行的多个SQLServer副本。

每个SQLServer实例都包含数据库引擎、AnalysisServices和ReportingServices的SQLServer,每个SQLServer数据库实例各有一套不为其他实例共享的系统及用户数据库。

数据库引擎是用于存储、处理和保护数据的核心服务。

利用数据库引擎可控制访问权限并快速处理事务。

实例又分为“默认实例”(defaultinstance)和“命名实例”(namedinstance),如果在一台计算机上安装第一个SQLSERVER,命名设置保持默认的话,那这个实例就是默认实例。

默认实例与安装计算机具有相同名称。

命名实例指安装SQLServer时给定了名称,可以安装多个命名实例,给定名称是为了与同一台计算机上的其他命名实例和默认实例区分开。

SQLServer应用程序可以通过仅指定服务器名称而连接到SQLServer的默认实例。

SQLServer应用程序在连接到服务器上的某个命名实例时必须既指定服务器名称又指定实例名称,计算机名称\实例名称。

一台计算机上最多只有一个默认实例,也可以没有默认实例,默认实例名与计算机名相同。

如果要访问本机上的默认SQL服务器实例,使用计算机名、(local)、localhost、127.0.0.1、.、本机IP地址,都可以达到相同的目的。

但如果要访问非本机的SQL服务器,那就必须使用计算机名称\实例名称。

默认实例和命名实例的区别:

1、服务中服务名称的区别:

(1)默认实例:

MSSQLSERVER。

(2)有名命名实例:

实列名为benet,在服务中的名称是MSSQL$BENET。

注:

如果你有多个实例的时候会在服务中出现多个服务名称。

2、连接到查询分析器或探查器的时候区别:

(1)默认实例可以使用:

“.”(点)、“(local)”、“计算机名称”。

(2)实例名称:

计算机名pcname,实例名benet,连接时使用的名称是pcname\benet。

 

(三)安全对象和权限

安全对象(Securable),可以通过权限得到保护的实体。

是SQLServer数据库引擎授权系统控制对其进行访问的资源。

如表、视图、触发器等。

SQLServer中将安全对象分为三个层次,分别为:

⊙服务器层级,包含的安全对象:

端点、登录、服务器角色、数据库。

⊙数据库层级,包含的安全对象:

用户、数据库角色、应用程序角色、程序集、消息类型、路由、服务、远程服务绑定、全文目录、证书、非对称密钥、对称密钥、约定、架构。

⊙构架(SCHEMA)层级,包含的安全对象:

类型、XML架构集合、对象(函数、过程、同义词、表、视图)

这三个层级是从上到下包含的,级别从高到低。

说明:

端点(endpoint)为服务器级安全对象。

MicrosoftSQLServer2005中的连接管理基于“端点”。

一个端点就是一个SQLServer对象,它能够使SQLServer在网络中通信。

对于数据库镜像,服务器实例需要有自己专用的“数据库镜像端点”。

此端点用途特殊,专门用于接收来自其他服务器实例的数据库镜像连接。

权限(permission),与对象关联的规则,用来规定哪些用户可以获得该对象的访问权限以及方式如何。

对安全对象的访问通过授予或拒绝权限进行控制。

权限可以明确用户能够使用哪些数据库对象,并对它们进行何种操作。

用户在数据库内的权限取决于用户账号的权限和该用户所属的角色的权限。

提示:

在设置权限时,尤其要注意权限在安全对象上的继承关系。

对于高级别安全对象上设置的权限,会被自动继承到低级别安全对象上。

理解权限的继承和权限的覆盖会在设置权限时减少很多问题,最佳方法是统筹规划,上机验证。

 

(四)架构(schema)

架构是指包含表、视图、过程等的容器。

它位于数据库内部,而数据库位于服务器内部。

这些实体就像嵌套框放置在一起。

服务器是最外面的框,而架构是最里面的框。

架构包含表、视图、过程、函数、同义词、类型、队列、XML架构集合等安全对象。

注意:

在SQLServer2000和早期版本中,数据库可以包含一个名为“架构”的实体,SQLServer2000包含CREATESCHEMA语句,但此实体实际上是所有者(创建对象时的用户)。

在SQLServer2005开始,架构既是一个容器,又是一个命名空间。

任何用户都可以拥有架构,并且架构所有权可以转移。

从SQLServer2005开始,每个用户都拥有一个默认架构。

可以使用CREATEUSER或ALTERUSER的DEFAULT_SCHEMA选项设置和更改默认架构。

如果未定义DEFAULT_SCHEMA,则数据库用户将使用dbo作为默认架构。

在SQLServer2000中,DataBaseName.dbo.TableName解释为:

数据库名.所有者.表名。

从SQLServer2005开始,DataBaseName.dbo.TableName解释为:

数据库名.架构名.表名。

在SQLServer2000中,数据库对象全称是server_name.[database_name].[owner_name].object_name

从SQLServer2005始,数据库对象全称是server_name.[database_name].[schema_name].object_name

在SQLSERVER2000或以前版本中创建一个对象,对象必须要有一个所有者(owner)。

对象是如何属于某个所有者的呢?

这依赖于创建对象时的用户。

您不能取消对象所有者(objectowner)的特权(privileges)。

对象所有者可以执行任何与对象有关的操作(例如INSERT、UPDATE、DELETE、SELECT或EXECUTE),也可以管理对象的权限。

从2005/2008后,一个我们必须重新认识的情况是对象不再有所有者(owner)。

架构包含对象,架构有所有者。

在2005前(如SQLServer2000中),没有架构的概念,只有用户的概念,那时候DBO是默认用户。

到了2005,有了架构概念,但是为了向后兼容,保留了DBO,并且把DBO作为默认架构,在不指定架构的情况下,默认为dbo,“默认架构”的概念,用于解析未使用其完全限定名称引用的对象的名称。

在SQLServer2005中,每个用户都有一个默认架构,用于指定服务器在解析对象的名称时将要搜索的第一个架构。

可以使用CREATEUSER和ALTERUSER的DEFAULT_SCHEMA选项设置和更改默认架构。

如果未定义DEFAULT_SCHEMA,则数据库用户将把DBO作为其默认架构。

 

(五)dbo

dbo既是默认架构,也是默认用户。

在SQLServer2000中,dbo作为默认用户。

在SQLServer2005中,dbo既作为默认用户,也作为默认架构(如图)。

dbo作为默认用户,dbo(DataBaseOwner,数据库的所有者,拥有数据库中的所有对象),每个数据库都有dbo,sysadmin服务器角色的成员自动映射成dbo,无法删除dbo用户,且此用户始终出现在每个数据库中。

通常,登录名sa映射为库中的用户dbo。

另外,固定服务器角色sysadmin的任何成员都映射到每个数据库内称为dbo的一个特殊用户上。

由固定服务器角色sysadmin的任何成员创建的任何对象都自动属于dbo。

由固定服务器角色sysadmin的任何成员或dbo用户创建的任何对象都自动属于dbo,由任何其他用户(包括db_owner固定数据库角色成员)创建的对象,属于创建该对象的用户,而不是dbo,用创建该对象的用户名限定。

例如:

如果用户Andrew是固定服务器角色sysadmin的成员,并创建表T1,则表T1属于dbo,并以dbo.T1而不是Andrew.T1进行限定。

相反,如果Andrew不是固定服务器角色sysadmin的成员,而只是固定数据库角色db_owner的成员,并创建表T1,则T1属于Andrew,并限定为Andrew.T1。

该表属于Andrew,因为该成员没有将表限定为dbo.T1。

dbo作为默认架构,在不指定架构的情况下,默认为dbo,“默认架构”的概念,用于解析未使用其完全限定名称引用的对象的名称。

在SQLServer2005中,每个用户都有一个默认架构,用于指定服务器在解析对象的名称时将要搜索的第一个架构。

可以使用CREATEUSER和ALTERUSER的DEFAULT_SCHEMA选项设置和更改默认架构。

如果未定义DEFAULT_SCHEMA,则数据库用户将把DBO作为其默认架构。

 

(六)Guest用户

guest用户不需要映射到登录名。

这种用户账号是供数据库中没有明确授予权限给已映射至认证用户使用的。

guest供那些已经成功登录到SQLSERVER实例,但是却没有通过用户访问数据库的权限的登录者使用的。

SQLSERVER2000中guest用户可以删除;而2005/2008中是不能删除的,却可以取消CONNECT权限,而且为安全起见,所有用户定义的数据库中缺省情况下guest用户的权限都是被取消了的,可在除master和tempdb之外的任何数据库中禁用Guest用户。

在SQLSERVER2000中,新建的数据库中没有Guest用户,但可以添加它,也可删除它,添加与删除方法与普通数据库相同。

在SQLServer2005或以上版本中GUEST已经默认存在于每个数据库中,但默认情况下,会在新数据库中禁用GUEST用户(在“对象资源管理器→安全性→登录”节点中图标上有禁用标识),我们可以通过以下语句启用GUEST用户:

GRANTCONNECTTOGUEST。

当你决定不再想让该数据库被非数据库授权的用户以GUEST身份进行访问时,可以再次将GUEST帐号禁用。

值得一提的是,GUEST用户在数据库中不能被删除,我们只能通过以下语句禁用GUEST用户:

REVOKECONNECTFROMGUEST。

在SQLSERVER2000中,要允许guest用户帐户访问数据库,可以像添加其它数据库用户那样添加它,如:

USE

GO

EXECsp_grantdbaccess'guest'

GO

在SQLSERVER2005中,允许guest用户帐户

USE

GO

GRANTCONNECTTOGUEST

GO

需要提醒的是,对于是否添加Guest用户要谨慎权衡利弊。

--SQLServer2000删除guest用户账号

USE

GO

EXECsp_revokedbaccess'guest'

GO

--SQLServer2005禁用guest用户账号

USE

GO

REVOKECONNECTFROMGUEST

GO

 

(七)sa登录名

SQLServer的sa登录名是服务器级的主体。

默认情况下,该登录名是在安装实例时创建的。

在SQLServer2005和SQLServer2008中,sa的默认数据库为master。

这是对早期版本的SQLServer的行为的更改。

sa(systemadministrator系统管理员)是为向后兼容而提供的特殊登录。

sysadmin是一种角色。

该角色能够执行SQLServer上的任何操作。

本质上,任何具有这种角色成员身份的人都是那个服务器上的sa。

这种服务器角色的创建为微软提供了某一天去除sa登录的能力——实际上,联机丛书把sa称作本质上为遗留物的东西。

与以前版本不同,SQLServer2008,即使是用混合模式安装,sa也默认禁用。

注意,sa是一个默认的SQLServer登录名,拥有操作SQLServer系统的所有权限,该登录名不能被删除。

当采用混合模式安装MicrosoftSQLServer系统之后,应该为sa指定一个密码,应为sa登录分配一个强密码(strongpassword)。

sa登录名会映射到sysadmin固定服务器角色,它对整个服务器有不能撤销的管理凭据。

如果攻击者以系统管理员的身份获取了访问权限,则可能造成的危害是无法预计的。

 

(八)其它几个默认配置的的登录(Logins)和用户(Users)

默认配置的的登录和用户除了dbo用户、Guest用户、sa登录,还有如下几个:

Administrators组是一个特殊的登录。

administrator用户默认administrators组的成员。

Administrators组实际名称为BUILTIN\Administrators。

早期版本,这个组的所有成员均为sysadmin角色的成员(这意味着Administrators组中的成员具有最高权限),但可以从该角色中移除这些成员。

与以前版本不同,SQLServer2008默认情况下,本地Windows组BUILTIN\Administrators不再包含在新的SQLServer2008安装上的SQLServer的sysadmin固定服务器角色中。

提示:

每个版本的SQLServer都具有不同的安全功能,默认配置也不尽相同,后出的版本更有利于安全,但安全性和使用方便这两种需求可能有矛盾的一面,最佳方法是上机了解验证。

NETWORKSERVICE和SYSTEM登录账户

NETWORKSERVICE和SYSTEM登录账户,实际名称为NTAUTHORITY\NETWORKSERVICE和NTAUTHORITY\SYSTEM,是否存在这些,依赖于服务器的配置。

如果配置了报表服务器,将出现NETWORKSERVICE登录账户。

INFORMATION_SCHEMA和sys用户

INFORMATION_SCHEMA和sys又是SQLServer预定义的架构(内置架构)名称,它们与INFORMATION_SCHEMA和sys用户具有相同的名称。

不能删除,主要用于向后兼容性。

可以使用INFORMATION_SCHEMA用户和sys用户访问INFORMATION_SCHEMA和sys架构的系统视图,获取有关数据库元数据信息。

 

(九)SQLServer中的角色

角色(role),是SQLServer用来管理服务器和数据库权限的,是安全帐户的集合,在管理权限时可以视为一个单元——作为分配权限的单位。

SQLServer中的角色分为服务器级别和数据库级别角色。

◇服务器级别角色

服务器级别角色用于帮助管理服务器上的权限。

服务器角色的权限作用域为服务器范围。

可以将登录名(LoginName)添加到服务器角色。

符合权限要求的用户,可以将服务器级主体(SQLServer登录名、Windows帐户和Windows组)添加到服务器级角色。

固定服务器角色的每个成员都可以将其他登录名添加到该同一角色。

固定服务器角色简介:

1)sysadmin:

系统管理员,角色成员可对SQLServer服务器进行所有的管理工作,为最高管理角色。

这个角色一般适合于数据库管理员(DBA)。

2)securityadmin:

安全管理员,角色成员可以管理登录名及其属性。

可以授予、拒绝、撤销服务器级和数据库级的权限。

另外还可以重置SQLServer登录名的密码。

3)serveradmin:

服务器管理员,角色成员具有对服务器进行设置及关闭服务器的权限。

4)setupadmin:

设置管理员,角色成员可以添加和删除链接服务器,并执行某些系统存储过程。

5)processadmin:

进程管理员,角色成员可以终止SQLServer实例中运行的进程。

6)diskadmin:

用于管理磁盘文件。

7)dbcreator:

数据库创建者,角色成员可以创建、更改、删除或还原任何数据库。

8)bulkadmin:

可执行BULKINSERT语句,但是这些成员对要插入数据的表必须有INSERT权限。

BULKINSERT语句的功能是以用户指定的格式复制一个数据文件至数据库表或视图。

9)在sqlserver2005sp2(补丁)及以后版本,服务器角色中还可以看到一个public角色。

每个SQLServer登录名均属于public服务器角色。

如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,该用户将继承授予该对象的public角色的权限。

public服务器角色默认拥有VIEWANYDATABASE(查看任何数据库)权限。

[VIEWANYDATABASE权限控制是否显示sys.databases和sys.sysdatabases视图以及sp_helpdb系统存储过程中的元数据(metadata)。

]

从SQLServer2012开始,您可以创建用户定义的服务器角色,并将服务器级权限添加到用户定义的服务器角色。

每个版本的SQLServer都具有不同的安全功能,版本越高,功能越强。

可以利用系统函数IS_SRVROLEMEMBER指示当前用户的SQLServer登录名是否是固定服务器角色的成员。

可以利用系统存储过程sp_helpsrvrolemember返回有关SQLServer固定服务器角色成员的信息。

--查询sysadmin固定服务器角色的成员。

execsp_helpsrvrolemember'sysadmin'

◇数据库级别的角色

数据库级别角色用于帮助管理数据库中的权限。

数据库级角色的权限作用域为数据库范围。

可以将[数据库]用户名(UserName)添加到数据库角色。

SQLServer中有两种类型的数据库级角色:

数据库中预定义的“固定数据库角色”和您可以创建的“灵活数据库角色”(自定义数据库角色)。

固定数据库角色是在数据库级别定义的,并且存在于每个数据库中。

db_owner和db_securityadmin数据库角色的成员可以管理固定数据库角色成员身份。

但是,只有db_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2