翻译12

SQL Server的安全3级楼梯:主体和安全对象

该系列

这篇文章是楼梯系列的一部分:SQL Server的安全楼梯

SQL Server有你需要的一切来保护您的服务器和数据对今天的复杂攻击。但在你可以有效地使用这些安全功能,你需要了解你所面对的威胁和一些基本的安全概念。第一阶梯水平的基础,可以充分利用SQL Server中的安全功能不浪费时间的功能,做什么来防止你的数据提供了具体的威胁。

总的来说,你实现SQL Server用户和对象安全通过指定对象上的权限委托。但什么是SQL Server的主吗?是什么让一个权限?在这楼梯的水平,你会发现,可以通过权限授权的SQL Server实例执行的操作和访问安全对象的各项原则。SQL Server中的一个重要的设置是校长的角色,你会学习如何作用可以使安全管理远远要比工作与个人用户为主的唯一类型更容易。您还将了解如何在SQL Server的安全对象,设置了舞台,在下一级学习权限。

授权

认证,覆盖在2级,只访问所有的东西在一个数据库服务器的一部分。认证是一个有点像有护照证明你是谁但没有签证你进入和走动,国家需要签证。在这个级别你会学到关于授权和如何作为签证提供了访问数据库对象。

一个主要是用户或进程可以访问一个或一个以上的安全对象在SQL服务器及其数据库。一个安全对象(或固定)是一个受保护的资源,只有某些人或过程可以查看或更改,如表中的数据。一个许可使主获得一种特定类型的访问可保护。

继续护照的类比,主要是护照的持有人,其图片的人。安全是主要想访问该国,并许可签证跨国界和享有的访问。

主体

主体,在安全方面的任何用户(人)、用户组(称为SQL Server中的一个角色),或代码的过程中,可以要求访问可保护对象和被授予或拒绝访问运行。所有的Windows和SQL Server登录主体,以及它们映射到数据库用户。以下列表显示层次结构中的大多数更重要的校长在SQL服务器,从服务器范围的原则与权限生成的SQL Server实例,数据库级的主体:

· Windows登录域

· Windows组

· Windows本地登录

SQL服务器级别的主体

· SQL Server登录

· SQL Server登录名映射到证书

· SQL Server登录名映射到Windows登录

· SQL Server登录名映射到非对称密钥

数据库级的主体

· 应用程序角色

· 数据库角色

· 数据库用户

· 映射到证书的数据库用户

· 映射到Windows登录名的数据库用户

· 映射到非对称密钥的数据库用户

· 公众的作用

 

这是了解这个层次的重要,因为主的范围部分决定授予其权限范围。例如,一个数据库用户可以有权限只在数据库中。SQL Server级别的主能在服务器上有权限,而Windows水平校长可以有权限延伸到SQL Server的束缚,进入Windows的本地实例和整个网络。

注意在上面的列表中,一个主体可以,在其他方面,可以登录(或用户)以及作用。在SQL Server中的作用类似于Windows组。谁在一个角色继承分配给该角色的权限的会员用户。的作用,使安全管理更容易,因为你不需要管理复杂的权限为个人用户。SQL Server支持以下几种角色:

· 固定服务器角色:SQL Server内置角色执行服务器级任务。

· 用户定义的服务器角色:自定义服务器角色创建,分配服务器级别的权限,并指定登录,服务器对象继承权限。

· 固定数据库角色:内置角色执行数据库任务和基本权限分配。

· 用户定义的数据库角色:自定义数据库角色的创建,分配权限,然后添加用户,用户对数据库对象继承权限。

你可以将用户分配到多个角色。角色还可以嵌套,但不要太得意忘形,你会如果你嵌套方案过于复杂,遭受的性能损失,并使维护和故障排除的噩梦。

固定服务器角色

固定服务器角色是在SQL Server内置的角色,你不能改变他们,以任何方式,你可以只添加登录他们的。他们的存在,仅在服务器级别上执行管理任务。固定服务器角色在SQL Server列在括号中的实际角色名称:

· 系统管理员(系统管理员:执行任何活动在SQL Server实例。这个角色包含了所有的其他角色,一旦用户是sysadmin的成员,他们不需要任何其他的角色。会员系统管理员可以做任何他们请的,所以这是一个好主意来限制会员只需要它的人,可以信任,可以不受限制地访问。

· 大容量插入管理员:执行BULK INSERT语句来获取数据到数据库中迅速。

· DatabaseCreator:创建和更改数据库。

· 磁盘管理器diskadmin:管理各个磁盘文件存储数据库。

· 流程管理员(进程管理员:管理进程正在运行SQL Server。

· 服务器管理员serveradmin:配置服务器范围的设置。尽管相似的名称和系统管理员,serveradmin是一个非常不同的和非常有限的作用。

· 设置管理员(setupadmin:安装复制和扩展程序管理。

· 安全管理员(securityadmin:管理登录服务器。

固定服务器角色的服务器允许你把任务分成部分提供的灵活性和安全性。换句话说,你不需要如果他们只需要创建数据库有人让系统管理员。相反,让他们的成员dbcreator,都需要他们的权限。

你可以指定一个登录到一个固定服务器角色的成员可以使用ManagementStudio或Transact-SQL。使用Management Studio中,执行以下步骤:

小贴士

代码从2级这个楼梯创造黄玉登录。如果你没有创建登录,随意去运行代码来创建它,或创建自己的登录使用2级的技术探讨。如果你是后者,调整步骤需要使用登录。

1. 扩大在Management Studio显示登录列表对象资源管理器中的安全部分。

2. 右键单击黄玉登录并选择“属性”弹出菜单中的。

3. 在登录属性”对话框中,选择服务器角色页面。本文列出了所有可用的服务器角色与添加登录到每个复选框。注意,黄玉,像所有的登录,已经是成员的公共角色。

4. 指定登录到dbcreator和diskadmin角色。图3.1所示的对话框登录黄玉。

 

图3.1。对于dbcreator固定服务器角色分配和diskadmin登录黄玉。

1. 单击确定以保存更改。

或者,您可以添加登录应用服务器角色节点在对象资源管理器节点下的保障作用。添加黄玉的securityadmin服务器角色:

1. 展开服务器角色节点下的安全节点在对象资源管理器。

2. 右键单击securityadmin服务器角色在对象资源管理器中,选择属性。这将打开服务器角色属性对话框。

单击“添加”按钮,在右下方的对话框,将打开“选择登录对话框。你可以键入黄玉并单击“检查名称,或单击“浏览”按钮来获得一个图3.1。对于dbcreator固定服务器角色分配和diskadmin登录黄玉。

1. 单击确定以保存更改。

或者,您可以添加登录应用服务器角色节点在对象资源管理器节点下的保障作用。添加<strong>黄玉</strong>的<em>securityadmin</em>服务器角色:

1. 展开<strong>服务器角色</strong>节点下的安全节点在对象资源管理器。

2. 右键单击<em>securityadmin</em>服务器角色在对象资源管理器中,选择<strong>属性</strong>。这将打开服务器角色属性对话框。

3. 单击“<strong>添加</strong>”按钮,在右下方的对话框,将打开“选择登录对话框。你可以键入<strong>黄玉</strong>并单击“检查名称,或单击“浏览”按钮来获得一个登录列表。一旦你进入<strong>黄玉</strong>,对话框如图3.2所示。

 

图3.2。选择要添加到服务器角色黄玉。

1. 单击OK添加黄玉的服务器角色。服务器角色属性对话框看起来像

 

图3.3。添加黄玉的securityadmin服务器角色。

1. 单击确定以保存更改。

添加一个登录服务器角色的另一种方式是通过使用Transact-SQL,sp_addsrvrolemember系统存储过程。下面的代码添加到现有的登录黄玉sysadmin角色:

EXEC sp_addsrvrolemember 'Topaz', 'sysadmin';

清单3.1:代码添加一个登录到服务器的作用。

你可以找到有关固定服务器角色通过运行两个存储过程,<sp_helpsrvrole>和sp_helpsrvrolemember。如果你通过一个有效的名称服务器角色sp_helpsrvrole,它会显示的说明的作用;否则显示所有服务器角色。图3.4显示了两个系统存储过程执行管理工作室展示的描述作用,现有会员securityadmin

 

图3.4。使用系统存储过程来获取有关服务器角色信息。

用户定义的服务器角色

一个期待已久的SQL Server 2012中的安全功能是用户定义的服务器角色。SQL Server已长了灵活的用户定义的数据库角色数据库级权限(你会了解这个水平后),但你终于可以得到颗粒与服务器级别权限自定义服务器角色。

在SQL Server的旧版本,只是授予权限给用户一些种类的唯一方法就是给他们一个内置的固定服务器角色,通常有太多的权限。使每个人的系统管理员是一个可怕的但常见的做法,是一个特别的问题,因为你不能否认一个系统管理员的任何东西。这违反最小特权原则的一大途径,但往往是一个现实的必要性。SQL Server 2005和后来使这一切更精细,让你指定任何特定的服务器级别权限的用户,但是缺乏组权限的能力到一个服务器角色。

SQL Server 2012解决,用户定义的服务器角色的支持问题。创建一个新的服务器角色是简单使用的创建服务器角色声明:

CREATE SERVER ROLE LimitedDBA;

清单3.2:代码来创建一个新的服务器角色。

然后你可以允许和拒绝的作用任何服务器级别权限你想要。下面的代码授予控制服务器允许新的角色类似于授予系统管理员特权再否认几的权限缩小的服务器角色的成员的权限。这是一个非常灵活的方式给他们的特定权限的用户组的成员。

USE master;

GO

-- Grant the role virtual sysadmin permissionsGRANT CONTROL SERVER TO LimitedDBA;

-- And take some permissions awayDENY ALTER ANY LOGIN TO LimitedDBA;DENY ALTER ANY SERVER AUDIT TO LimitedDBA;DENY ALTER ANY SERVER ROLE TO LimitedDBA;DENY CREATE SERVER ROLE TO LimitedDBA;        -- Covered by ALTER ANY SERVER ROLEDENY UNSAFE ASSEMBLY TO LimitedDBA;

清单3.3:代码添加到服务器角色权限和否认。

测试的作用,代码清单3-4创建一个登录相关的Windows组,DBA,在机命名为马拉松,并添加新的登录到有限公司的作用。

小贴士

运行此代码之前,DBA组必须在Windows本地实例存在。您可以创建它,进入控制面板的“计算机管理程序,扩大系统工具和本地用户和组”节点,并将其添加到组节点。同时,改变机器的名字从马拉松到本地机器。

-- Create a login for DBAs Windows groupCREATE LOGIN [Marathon\DBAs] FROM WINDOWS;

-- Add to the server roleALTER SERVER ROLE LimitedDBA ADD MEMBER [Marathon\DBAs];

3.4:上市代码来创建一个登录名添加到服务器角色。

代码清单3.5然后创建一个SQL Server登录卡罗尔,没有任何权限内的SQL Server实例。然后尝试卡罗尔的安全上下文需要服务器级别权限下的各种操作:创建一个登录,查看系统信息,并创建一个服务器角色。所有这些行动失败了,你可以看到在图3,因为卡罗尔主没有权限执行这些动作。

-- Create carol loginCREATE LOGIN carol WITH PASSWORD = 'crolPWD123%%%';

EXECUTE AS LOGIN = 'carol';-- Verify user contextPRINT suser_sname();-- Can Carol alter logins?CREATE LOGIN donkiely WITH PASSWORD = 'G@Sm3aIKU3HA#fW^MNyA';    -- No-- Other server-level permissions?SELECT * FROM sys.dm_exec_cached_plans;    -- No, requires VIEW USER STATECREATE SERVER ROLE CarolRole;                    -- NoREVERT;

清单3.5:代码来创建一个登录和测试是否有特定的权限。

小贴士

这个代码不检查是否存在颂歌在SQL Server实例的登录。如果有,那创建登录语句将失败。在这种情况下,就跳过这声明。

 

图3.5。失败的行动,因为卡罗尔没有权限。

接下来的代码添加了卡罗尔新有限公司用户定义的服务器角色,并再次尝试执行相同的动作。从图3.6中可以看到,这次卡罗尔能够获取系统信息(选择行为),因为这允许通过控制服务器的权限。但卡罗尔仍然无法创建登录名或服务器角色,因为这些权限明确否认从有限公司的作用。

ALTER SERVER ROLE LimitedDBA ADD MEMBER carol;

-- Now does Carol have permissions?EXECUTE AS LOGIN = 'carol';CREATE LOGIN donkiely WITH PASSWORD = 'G@Sm3aIKU3HA#fW^MNyA';    -- Still not possibleSELECT * FROM sys.dm_exec_cached_plans;                            -- Yes, CONTROL SERVER covers VIEW USER STATECREATE SERVER ROLE CarolRole;                    -- Not possibleREVERT;

清单3.6:代码再次测试是否一个服务器角色的成员具有特定的权限。

 

图3.6。服务器级别的操作权限通过LimitedDBA的部分结果。

要查看所有可用的服务器级别权限可以授予和拒绝服务器角色,执行下面的代码。图显示的结果。

SELECT * FROM sys.fn_builtin_permissions('SERVER')

    ORDER BY permission_name;

上市3:代码查看所有可用的服务器级别权限。

 

图3.7。服务器级别权限部分名单。

您可以创建用户定义的服务器角色授予用户和组的一个非常具体的权限集,他们需要做好自己的工作,没有更多的。这是远比早期版本的SQL Server更灵活,使安全管理与SQL Server 2012更容易、更容易管理的必然意味着一个更安全的服务器。

固定数据库角色

固定数据库角色存在在数据库级别,不是服务器的水平,并控制授权只能在数据库。每个数据库都有自己的收集固定数据库角色的成员,所以你可以在每个数据库的单独配置的作用。固定数据库角色就像固定服务器角色在某种意义上,他们不能被删除,修改或改变,但你可以添加数据库用户和角色的成员。固定数据库角色:

· db_accessadmin可以添加或删除Windows登录名和组和SQL Server登录在数据库。

· db_backupoperato:可以备份数据库。

· db_datareader:可以查看任何数据从数据库中的所有用户表。

· db_datawriter:可以添加、更改或删除数据,所有用户的数据库中的表。

· db_ddladmin:可以添加,修改,或删除数据库中的对象。(数据定义语言DDL代表,集Transact-SQL命令使结构变化的数据库。)

· db_denydatareader:不能查看任何数据库中的数据。

· db_denydatawriter:不能更改数据库中的数据。

· db_owner:可执行的活动的所有数据库角色以及维护和配置活动。这包括所有的其他角色,所以基本上这个数据库管理员。

· db_securityadmin:可以管理角色成员和语句和对象的权限的数据库。

固定数据库角色的成员可以简化数据库权限分配。例如,假设你想让用户访问特定数据库备份。你不希望用户能够只备份读取数据。你能完成这个很容易让用户成员的db_backupoperato和db_denydatareader角色。使用sp_helprole和sp_helprolemember系统存储过程来查看信息的数据库角色。

用户的公共角色和客人

有一对夫妇的特殊原则,要求提。你不可能在任何有意义的方式使用这些原则,但不影响安全,你需要知道它们是什么。

公众的作用是一种特殊的服务器角色,无法删除。每个数据库用户属于公众的角色,所以你不需要指定用户、组或角色,它。每一个SQL Server数据库中包含的公共角色,包括主、msdb,tempdb,和模型。然而,你可以允许或限制的公共角色的权限决定你的安全需求。要记住有关的公共角色,权限可以授予公共适用于所有数据库用户的重要。

小贴士

通常你会想限制权限可以授予public角色授予权限,因为大家很少结果在一个安全的数据库。

Guest用户存在于每一个数据库,包括系统数据库像主人和模型。作为一个用户,它继承了权限的公共角色,P。它进场时,服务器登录不映射到在一个特定的数据库用户。默认情况下,Guest用户没有权限,但您可以访问的数据库对象和数据库中执行操作的权限。正如你可能想到的,这是一个很危险的事情在一个精心设计的安全方案,数据库服务器很少有必要,应避免将权限分配给该用户。虽然你不能删除该用户,你应该禁用它的用户数据库被吊销其连接使用代码如清单3.8所示的权限。

USE Northwind;

GO

REVOKE CONNECT FROM guest;

GO

清单3.8:代码禁用Guest用户在用户数据库的CONNECT权限撤销其。

小贴士

不要禁用Guest用户在系统数据库中,这可能会导致问题,你不想处理!这些数据库需要的各种功能,Guest用户。

的dbo用户和架构

dbo是一个特殊的用户帐户在每个数据库映射到sysadmin固定服务器角色。这意味着,如果你是一个成员的作用和系统管理员创建一个在任何数据库,那么这个对象的ownerwill是dbo,不是你。你不能删除dbo用户和它的映射只有系统管理员,而不是数据库所有者(db_owner)。这是令人困惑的,因为dbo用户真正无关的db_owner作用。

每个数据库也归dbo用户dbo架构,并默认架构为dbo用户。因此,当你访问一个数据库作为系统管理员和创建一个对象没有指定一个模式,它的两部分名称将dbo.objectname。也是一个次要的DBO模式默认模式为其他用户访问数据时,如果没有指定架构名称是。如果用户乔试图访问一个表叫销售,SQL Server将首先查看是否有销售表中的默认模式为用户乔,如果没有,它会检查看是否有销售表在dbo架构。如果销售不存在任何模式是一个错误的产生,对象不能被发现。最好的做法是,总是每一对象访问指定架构名称。

用户定义的数据库角色

数据库角色并不局限于预定义的角色,你可以创建你自己的角色。用户可以定义两种类型的数据库角色:

· 标准的作用:用这个角色来简化权限分配给用户组。你可以嵌套固定数据库角色或其他角色,将用户分配到角色,在这种情况下他们继承权限的作用。

· 应用程序角色:应用程序使用这个角色允许的应用程序,或连接,登录到数据库和激活应用程序角色提供角色名和密码。你不能添加用户应用程序角色你其他的角色,一旦激活应用程序角色的权限申请连接的持续时间。用户可能会有单独的权限是悬浮的,只有应用程序角色的权限检查。

小贴士

你可以添加一个自定义角色固定数据库角色相同的方式你的用户添加到一个固定数据库角色:通过固定数据库角色属性对话框。

安全对象

一个安全对象是一个受保护的资源,你可以访问控制。通常它是一个物理的东西,或者至少是一些物理对象可以作为一个数字!但安全也可以是一个动作,做出某种改变数据库或SQL Server实例的能力。例如,管理员可以授予主把一个对象的所有权的能力。授予此权限不会立即更改对象的所有权;它只是给校长,在未来的某个时间做这件事的能力。

图3.8显示了在一个SQL Server实例的安全对象。服务器级别的安全对象具有广泛的范围,包括所有的SQL Server,包括影响校长的能力改变所有数据库的权限。数据库的范围包括所有的对象在一个特定的数据库,如那些用于管理用户以及创建加密密钥。模式的范围包括在一个模式基本数据结构的数据库中的所有对象,包括表和数据。一个数据库可以包含很多模式,每个可以包含数据库对象的完整集合的子集。是什么让架构强大的是你可以指定和否认对架构的权限,这些权限适用于所有对象的架构包含。

图3。在SQL Server的安全对象。箭头显示一个较小的范围的范围包括在对象层次结构。

这是明白授予权限在服务器级别权限往往意味着在一个较小的范围很重要。例如,授予数据库级权限可能意味着主已经隐含在一个或所有权限的数据库对象的架构。

概要

在这一级的楼梯到SQL Server的安全,您了解了第一部分的授权,校长和安全对象可以在一个SQL Server实例及其数据库。在一个新的水平,你会发现,当授予权限,主要对可保护对象或带走了主体与对象做某事的能力。有了这样的认识,你就能够在SQL Server身份验证和授权的颗粒性质保持数据库资产的有效利用,严格控制允许授权用户和进程完成工作。

 

猜你喜欢

转载自blog.csdn.net/xtt_3170707038/article/details/80552218
今日推荐