DATABASE SYSTEM CONCEPTS6.3

SQL Server安全级别3的阶梯:校长和安全性
作者:Don Kiely,2014年7月16日

该系列
本文是“Stairway系列:SQL Server安全性的阶梯”的一部分

SQL Server提供了保护服务器和数据免受当今复杂攻击的一切需要。但在您可以有效使用这些安全功能之前,您需要了解您所面临的威胁以及一些基本的安全概念。这第一阶段级别提供了一个基础,这样您就可以充分利用SQL Server中的安全功能,而不会浪费时间在无法防止数据受到特定威胁的功能上。

通常,通过将对象的权限分配给主体,可以在SQL Server中实现用户和对象安全性。但是什么是SQL Server主体?它有什么获得许可?在这个楼梯级别,您将了解可以通过权限执行操作并访问SQL Server实例中的安全对象的各种委托人。 SQL Server中一组重要的主体是角色,并且您将了解角色如何使管理安全性比使用单个用户作为唯一类型的主体更容易。您还将学习SQL Server中的安全对象,设置舞台以了解下一级别的权限。

授权
身份验证在第2级中涵盖,只是访问数据库服务器中的所有好东西的一部分。身份验证有点像拥有证明你是谁但没有签证的护照 - 你需要签证才能进入并在全国各地移动。在这个级别中,您将了解授权以及它如何充当提供数据库对象访问的签证。

主体是可以访问SQL Server或其数据库中的一个或多个安全对象的用户或进程。一个安全的对象(或者只是安全的)是一种受保护的资源,只有某些人或进程才能查看或更改,例如表中的数据。权限允许委托人获得对安全性的特定类型的访问。

为了继续护照的比喻,校长是护照的持有人,其照片是其中的人。安全的是校长想要访问的国家,并且许可是穿越国家边界并且访问的签证。

 

校长
在安全上下文中,委托人是任何用户(人类),用户组(称为SQL Server中的角色),或者在进程中运行的代码,可以请求访问安全对象并被授予或拒绝访问它。所有WindowsSQL Server登录都是主体,以及它们在数据库中映射到的用户。以下列表显示了SQL Server中大多数重要主体的层次结构,范围从具有跨越SQL Server实例的权限的服务器范围主体到数据库级主体:

Windows级别的校长

Windows域登录
Windows
Windows本地登录
SQL Server级别的主体

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的成员,他们不需要任何其他角色。 sysadmin的成员可以做任何他们想做的事情,所以将会员限制为只有那些需要它并且可以信任才能无限访问的人是个好主意。
•批量插入管理器(bulkadmin):执行BULK INSERT语句以快速将数据导入数据库。
•数据库创建者(dbcreator):创建和更改数据库。
•磁盘管理器(diskadmin):管理存储数据库的各种磁盘文件。
•流程管理员(processadmin):管理在SQL Server中运行的流程。
Server Administratorserveradmin):配置服务器范围的设置。尽管名称与系统管理员相似,但serveradmin是一个非常不同而且更为有限的角色。
•设置管理员(setupadmin):安装复制并管理扩展过程。
•安全管理员(securityadmin):管理服务器的登录。
固定的服务器角色通过允许您将服务器任务划分为多个部分提供了灵活性和安换句话说,如果他们只需要创建数据库,则不需要让某人成为系统管理员。相反,让他们成为dbcreator的成员,并拥有他们所需的所有权限。

您可以使用Management Studio或使用Transact-SQL将登录名分配给固定的服务器角色。要使用Management Studio,请执行以下步骤:

小费:
这个楼梯的Level 2的代码创建了Topaz登录。如果您没有创建该登录名,请随时运行该代码以创建该登录名,或者使用第2级中讨论的技术创建您自己的登录名。如果选择了第二级,请根据需要调整步骤以使用该登录名。

1.展开Management Studio中对象资源管理器的安全部分,显示登录列表。
2.右键单击Topaz登录并从弹出菜单中选择属性。
3.在“登录属性”对话框中,选择“服务器角色”页面。这列出了所有可用的服务器角色以及用于将登录添加到每个角色的复选框。请注意,与所有登录一样,Topaz已经是公共角色的成员。
4.将登录名分配给dbcreatordiskadmin角色。图3.1显示了登录Topaz的对话框。

3.1。将登录Topaz分配给dbcreatordiskadmin固定服务器角色。

5.单击确定保存更改。
或者,您可以使用对象资源管理器中安全节点下的服务器角色节点将登录添加到角色。将Topaz添加到securityadmin服务器角色:

1.在对象资源管理器的Security节点下展开Server Roles节点。
2.在对象资源管理器中右键单击securityadmin服务器角色,然后选择属性。这将打开“服务器角色属性”对话框。
3.点击对话框右下角的Add按钮,打开Select Logins对话框。您可以键入Topaz并单击检查名称,或者单击浏览按钮以获取登录列表。一旦你输入Topaz,对话框如图3.2所示。

3.2。选择Topaz添加到服务器角色。

4.单击确定将Topaz添加到服务器角色。服务器角色属性对话框如图3.3所示。
3.3。将topaz添加到securityadmin服务器角色。

5.单击确定保存更改。
另一种通过使用sp_addsrvrolemember系统存储过程在Transact-SQL中添加登录到服务器角色的方法。以下代码将现有的登录Topaz添加到sysadmin角色:

清单3.1:将登录添加到服务器角色的代码。

您可以通过运行两个存储过程sp_helpsrvrolesp_helpsrvrolemember来查找有关固定服务器角色的信息。如果您将服务器角色的有效名称传递给sp_helpsrvrole,它将显示该角色的说明;否则它会显示所有服务器角色。图3.4显示了在Management Studio中执行的系统存储过程,以显示securityadmin角色及其当前成员资格的描述。

用户定义的服务器角色
SQL Server 2012中期待已久的安全功能是用户定义的服务器角色。 SQL Server一直拥有用于数据库级权限的灵活的用户定义数据库角色(稍后将在本级别中学习),但通过自定义服务器角色,您最终可以获得与服务器级权限一样细微的角色。

SQL Server的旧版本中,向用户授予某种权限的唯一方法是将其分配给内置的固定服务器角色,该角色通常拥有太多的权限。让每个人都成为系统管理员是一种可怕但常见的做法,尤其是有问题的,因为你无法否认系统管理员的任何事情。这大大侵犯了最小特权的原则,但往往是一种实际的必要性。 SQL Server 2005和更高版本使得所有这些更加细化,让您可以为用户分配几乎任何特定的服务器级权限,但缺乏将这些权限分组到服务器角色的功能。

SQL Server 2012通过支持用户定义的服务器角色解决了这个问题。创建新的服务器角色与使用CREATE SERVER ROLE语句一样简单:

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

然后,您可以授予和拒绝角色任何所需的服务器级权限。以下代码将CONTROL SERVER权限授予新角色(类似于授予sysadmin特权),然后拒绝一些权限来缩小服务器角色成员的特权。这是授予属于组成员特定权限的用户的非常灵活的方式。

清单3.3:添加和拒绝服务器角色权限的代码。

为了测试角色,清单3-4中的代码在名为Marathon的计算机上创建与WindowsDBA相关联的登录名,并将新登录名添加到LimitedDBA角色。

小费:
在运行此代码之前,DBA组必须存在于本地Windows实例中。您可以通过进入控制面板的计算机管理小程序,展开系统工具和本地用户和组节点,并将其添加到组节点来创建它。另外,将机器名称从Marathon更改为本地机器。

代码3.4:创建一个登录并将其添加到服务器角色的代码。

代码清单3.5中的代码然后创建一个SQL Server登录carol,在SQL Server实例中没有任何权限。然后代码尝试在carol的安全上下文中需要服务器级权限的各种操作:创建另一个登录名,查看系统信息并创建另一个服务器角色。所有这些操作都失败了,如图3.5所示,因为carol主体没有执行这些操作的权限

清单3.5:创建登录和测试以查看它是否具有特定权限的代码。

小费:
此代码不检查在此SQL Server实例中是否存在现有的carol登录名。如果有,则CREATE LOGIN语句将失败。在这种情况下,只需跳过该声明即可。

3.5。由于carol没有权限,所以操作失败。

接下来,代码将carol添加到新的LimitedDBA用户定义的服务器角色,并再次尝试执行相同的操作。正如您在图3.6中看到的那样,这次carol能够获取系统信息(SELECT操作),因为该权限是通过CONTROL SERVER权限授予的。但是,carol仍然无法创建登录名或服务器角色,因为这些权限被显式拒绝来自LimitedDBA角色。

代码3.6:代码再次测试服务器角色的成员是否具有特定的权限
3.6。通过LimitedDBA使用部分权限的服务器级别操作的结果。

为了查看您可以授予和拒绝服务器角色的所有可用服务器级权限,请执行以下代码。结果如图3.7所示。

代码3.7:查看所有可用的服务器级权限。

3.7。部分服务器级权限列表。

您可以创建用户定义的服务器角色,为用户和组授予他们完成工作所需的一组非常具体的权限,而不再需要其他权限。这比早期版本的SQL Server灵活得多,使得SQL Server 2012的安全管理变得容易得多,而且更简单的管理不可避免地意味着更安全的服务器。

固定的数据库角色
固定数据库角色存在于数据库级别,而不是服务器级别,并且仅在该数据库内控制授权。每个数据库都有自己的固定数据库角色集合,因此您可以分别在每个数据库中配置角色。固定数据库角色就像固定服务器角色,它们不能被删除,修改或更改,但可以将数据库用户和用户定义的角色添加为成员。固定的数据库角色是:

db_accessadmin:可以在数据库中添加或删除Windows登录名和组以及SQL Server登录名。
db_backupoperator:可以备份数据库。
db_datareader:可以查看数据库中所有用户表中的任何数据。
db_datawriter:可以添加,更改或删除数据库中所有用户表中的数据。
db_ddladmin:可以添加,修改或删除数据库中的对象。 (DDL表示数据定义语言,这是一组对数据库进行结构更改的Transact-SQL命令。)
db_denydatareader:无法查看数据库中的任何数据。
db_denydatawriter:无法更改数据库中的任何数据。
db_owner:可以执行所有数据库角色的活动以及维护和配置活动。该角色包含所有其他角色,因此它本质上是此数据库的管理员。
db_securityadmin:可以管理数据库中的角色成员资格以及语句和对象权限。
固定数据库角色可以简化在数据库中分配权限。例如,假设您想让用户只访问特定的数据库来备份它。您不希望用户能够读取数据 - 只需将其备份即可。通过使用户成为db_backupoperatordb_denydatareader角色的成员,您可以轻松完成此任务。使用sp_helprolesp_helprolemember系统存储过程来查看有关数据库角色的信息。

公共角色和访客用户
有几个特殊的校长需要提及。你不可能以任何有意义的方式使用这些校长,但他们确实会影响安全性,所以你需要知道他们是什么。

公共角色是一个特殊的服务器角色,不能被删除。每个数据库用户都属于这个公共角色,因此您不需要为其分配用户,组或角色。每个SQL Server数据库都包含公共角色,包括mastermsdbtempdbmodel。但是,您可以根据您的安全需求决定授予或限制公共角色的权限。关于公共角色需要牢记的重要一点是您授予公众的权限适用于所有数据库用户。

小费:
通常情况下,您需要限制授予公共角色的权限,因为向每个人授予权限很少导致安全的数据库。

来宾用户存在于每个数据库中,包括像mastermodel这样的系统数据库。作为用户,它继承了公共角色的权限。它在服务器登录未映射到特定数据库中的用户时起作用。默认情况下,来宾用户没有权限,但您可以授予访问数据库对象的权限并在数据库中执行操作。正如您所预料的那样,这是一个非常危险的事情,这对于数据库服务器的设计良好的安全方案中很少需要,您应该避免为该用户分配权限。虽然你不能删除这个用户,但你应该在用户数据库中通过使用代码清除它的CONNECT权限来禁用它,如清单3.8所示。

 
      
 
每日新鲜的文章:

获取SQL Server Central新闻稿并每天获取新的SQL Server文章。获取数据库周刊,以汇总来自网络的所有最大的SQL新闻。注册不,谢谢想要更多这样的伟大的文章?注册获取每日提供的新SQL Server知识。注册感谢此作者分享:
      给此评分加入讨论添加到公文包
 
SQL Server安全级别3的阶梯:校长和安全性
作者:Don Kiely2014716

该系列
本文是Stairway系列:SQL Server安全性的阶梯”的一部分

SQL Server提供了保护服务器和数据免受当今复杂攻击的一切需要。但在您可以有效使用这些安全功能之前,您需要了解您所面临的威胁以及一些基本的安全概念。这第一阶段级别提供了一个基础,这样您就可以充分利用SQL Server中的安全功能,而不会浪费时间在无法防止数据受到特定威胁的功能上。

通常,通过将对象的权限分配给主体,可以在SQL Server中实现用户和对象安全性。但是什么是SQL Server主体?它有什么获得许可?在这个楼梯级别,您将了解可以通过权限执行操作并访问SQL Server实例中的安全对象的各种委托人。 SQL Server中一组重要的主体是角色,并且您将了解角色如何使管理安全性比使用单个用户作为唯一类型的主体更容易。您还将学习SQL Server中的安全对象,设置舞台以了解下一级别的权限。

授权
身份验证在第2级中涵盖,只是访问数据库服务器中的所有好东西的一部分。身份验证有点像拥有证明你是谁但没有签证的护照 - 你需要签证才能进入并在全国各地移动。在这个级别中,您将了解授权以及它如何充当提供数据库对象访问的签证。

主体是可以访问SQL Server或其数据库中的一个或多个安全对象的用户或进程。一个安全的对象(或者只是安全的)是一种受保护的资源,只有某些人或进程才能查看或更改,例如表中的数据。权限允许委托人获得对安全性的特定类型的访问。

为了继续护照的比喻,校长是护照的持有人,其照片是其中的人。安全的是校长想要访问的国家,并且许可是穿越国家边界并且访问的签证。

校长
在安全上下文中,委托人是任何用户(人类),用户组(称为SQL Server中的角色),或者在进程中运行的代码,可以请求访问安全对象并被授予或拒绝访问它。所有WindowsSQL Server登录都是主体,以及它们在数据库中映射到的用户。以下列表显示了SQL Server中大多数重要主体的层次结构,范围从具有跨越SQL Server实例的权限的服务器范围主体到数据库级主体:

Windows级别的校长

•视窗

 

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

•标准角色:使用此角色可简化为用户组分配权限。您可以嵌套固定的数据库角色或其他用户定义的角色,并将用户分配给角色,在这种情况下,他们会继承角色的权限。
•应用程序角色:应用程序使用此角色允许应用程序或连接登录到数据库并通过提供角色名称和密码来激活应用程序角色。您不能像对其他角色一样将用户添加到应用程序角色,并且一旦激活,应用程序角色的权限将适用于连接的持续时间。用户可能拥有的任何单个权限都将被挂起,并且只检查应用程序角色的权限。
小费:
您可以将用户定义的角色添加到固定数据库角色,这与将用户添加到固定数据库角色的方式相同:通过固定数据库角色的属性对话框。

安全的物体
安全的对象是您可以控制访问的受保护资源。通常它是一个物理的东西,或者至少像数字对象一样物理化!但是,安全也可以是一种行为,即对数据库或SQL Server实例进行某种更改的能力。例如,管理员可以授予主体获取对象所有权的能力。授予此权限不会立即更改对象的所有权;它只是让委托人有能力在未来的某个时间做到这一点。

3.8显示了SQL Server实例中的大多数安全对象。服务器级安全对象具有最广泛的范围,包含所有SQL Server,包括影响委托人对所有数据库进行更改的权限。数据库范围包含特定数据库中的所有对象,例如用于管理用户以及创建加密密钥的对象。模式范围包括模式中的所有对象 - 实质上是数据库的数据结构,包括表格及其数据。一个数据库可以包含很多模式,每个模式可以包含全部数据库对象的一个​​子集。使模式功能强大的是,您可以在模式上分配和拒绝权限,并且这些权限适用于模式包含的所有对象。

3.8SQL Server中的安全对象。箭头显示了一个范围如何在对象层次结构中包含更小的范围。

理解在服务器级授予权限通常意味着在较小范围内的权限是很重要的。例如,授予数据库级权限可能意味着委托人对一个或全部数据库的模式中的对象具有隐含的权限。

概要
SQL Server安全性的这一级别中,您了解了授权的第一部分,SQL Server及其数据库实例中可用的主体和安全对象。在下一个层次中,您将学习权限,当授予给安全对象的委托人时授予或剥夺委托人对该对象执行某些操作的权限。有了这样的理解,您将能够有效地利用SQL Server中的身份验证和授权的细粒度特性来严格控制数据库资产,同时允许授权用户和流程完成其工作。

 
资源:
等级3 - 校长和安全人员修订.sql
本文是SQL Server安全性阶梯的一部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值