共计 6116 个字符,预计需要花费 16 分钟才能阅读完成。
本篇内容介绍了“怎么配置一个安全稳定的 SQL SERVER 的数据库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、首先你要确认你的鉴别模式:
WIN NT 鉴别模式呢还是混合模式,其中混合模式包括 WIN NT 鉴别模式和 SQL SERVER 鉴别模式
实施鉴别模式的步骤
1、核实采用了可信连接
2、设置鉴别模式
3、关闭和重启 MSSQLServer 服务程序
4、创建 WIN NT 分组和用户
5、授权 WIN NT 分组和用户可存取 SQL Server
6、为用非可信任连接的用户创建 SQL Server 登录帐号
二、为用户和角色分配登录帐号
三、给角色分配登录权
四、为用户和角色分配许可权限
在改进 SQL Server 7.0 系列所实现的安全机制的过程中,Microsoft 建立了一种既灵活又强大的安全管理
机制,它能够对用户访问 SQL Server 服务器系统和数据库的安全进行全面地管理。按照本文介绍的步骤,你
可以为 SQL Server 7.0(或 2000)构造出一个灵活的、可管理的安全策略,而且它的安全性经得起考验。
一、验证方法选择
本文对验证(authentication)和授权(authorization)这两个概念作不同的解释。验证是指检验用户
的身份标识;授权是指允许用户做些什么。在本文的讨论中,验证过程在用户登录 SQL Server 的时候出现,
授权过程在用户试图访问数据或执行命令的时候出现。
构造安全策略的第一个步骤是确定 SQL Server 用哪种方式验证用户。SQL Server 的验证是把一组帐户、密
码与 Master 数据库 Sysxlogins 表中的一个清单进行匹配。Windows NT/2000 的验证是请求域控制器检查用户身
份的合法性。一般地,如果服务器可以访问域控制器,我们应该使用 Windows NT/2000 验证。域控制器可以是
Win2K 服务器,也可以是 NT 服务器。无论在哪种情况下,SQL Server 都接收到一个访问标记(Access Token)。
访问标记是在验证过程中构造出来的一个特殊列表,其中包含了用户的 SID(安全标识号)以及一系列用户所
在组的 SID。正如本文后面所介绍的,SQL Server 以这些 SID 为基础授予访问权限。注意,操作系统如何构造访
问标记并不重要,SQL Server 只使用访问标记中的 SID。也就是说,不论你使用 SQL Server 2000、SQL Server
7.0、Win2K 还是 NT 进行验证都无关紧要,结果都一样。
如果使用 SQL Server 验证的登录,它最大的好处是很容易通过 Enterprise Manager 实现,最大的缺点在于
SQL Server 验证的登录只对特定的服务器有效,也就是说,在一个多服务器的环境中管理比较困难。使用 SQL
Server 进行验证的第二个重要的缺点是,对于每一个数据库,我们必须分别地为它管理权限。如果某个用户
对两个数据库有相同的权限要求,我们必须手工设置两个数据库的权限,或者编写脚本设置权限。如果用户数
量较少,比如 25 个以下,而且这些用户的权限变化不是很频繁,SQL Server 验证的登录或许适用。但是,在几
乎所有的其他情况下(有一些例外情况,例如直接管理安全问题的应用),这种登录方式的管理负担将超过它
的优点。
二、Web 环境中的验证
即使最好的安全策略也常常在一种情形前屈服,这种情形就是在 Web 应用中使用 SQL Server 的数据。在这
种情形下,进行验证的典型方法是把一组 SQL Server 登录名称和密码嵌入到 Web 服务器上运行的程序,比如
ASP 页面或者 CGI 脚本;然后,由 Web 服务器负责验证用户,应用程序则使用它自己的登录帐户(或者是系统管
理员 sa 帐户,或者为了方便起见,使用 Sysadmin 服务器角色中的登录帐户)为用户访问数据。
这种安排有几个缺点,其中最重要的包括:它不具备对用户在服务器上的活动进行审核的能力,完全依
赖于 Web 应用程序实现用户验证,当 SQL Server 需要限定用户权限时不同的用户之间不易区别。如果你使用的
是 IIS 5.0 或者 IIS 4.0,你可以用四种方法验证用户。第一种方法是为每一个网站和每一个虚拟目录创建一
个匿名用户的 NT 帐户。此后,所有应用程序登录 SQL Server 时都使用该安全环境。我们可以通过授予 NT 匿名
帐户合适的权限,改进审核和验证功能。
第二种方法是让所有网站使用 Basic 验证。此时,只有当用户在对话框中输入了合法的帐户和密码,IIS
才会允许他们访问页面。IIS 依靠一个 NT 安全数据库实现登录身份验证,NT 安全数据库既可以在本地服务器
上,也可以在域控制器上。当用户运行一个访问 SQL Server 数据库的程序或者脚本时,IIS 把用户为了浏览
页面而提供的身份信息发送给服务器。如果你使用这种方法,应该记住:在通常情况下,浏览器与服务器之
间的密码传送一般是不加密的,对于那些使用 Basic 验证而安全又很重要的网站,你必须实现 SSL(Secure
Sockets Layer,安全套接字层)。
在客户端只使用 IE 5.0、IE 4.0、IE 3.0 浏览器的情况下,你可以使用第三种验证方法。你可以在 Web
网站上和虚拟目录上都启用 NT 验证。IE 会把用户登录计算机的身份信息发送给 IIS,当该用户试图登录 SQL
Server 时 IIS 就使用这些登录信息。使用这种简化的方法时,我们可以在一个远程网站的域上对用户身份进
行验证(该远程网站登录到一个与运行着 Web 服务器的域有着信任关系的域)。
最后,如果用户都有个人数字证书,你可以把那些证书映射到本地域的 NT 帐户上。个人数字证书与服务
器数字证书以同样的技术为基础,它证明用户身份标识的合法性,所以可以取代 NT 的 Challenge/Response
(质询 / 回应)验证算法。Netscape 和 IE 都自动在每一个页面请求中把证书信息发送给 IIS。IIS 提供了一个
让管理员把证书映射到 NT 帐户的工具。因此,我们可以用数字证书取代通常的提供帐户名字和密码的登录过
程。
由此可见,通过 NT 帐户验证用户时我们可以使用多种实现方法。即使当用户通过 IIS 跨越 Internet 连接
SQL Server 时,选择仍旧存在。因此,你应该把 NT 验证作为首选的用户身份验证办法。
三、设置全局组
构造安全策略的下一个步骤是确定用户应该属于什么组。通常,每一个组织或应用程序的用户都可以按
照他们对数据的特定访问要求分成许多类别。例如,会计应用软件的用户一般包括:数据输入操作员,数据
输入管理员,报表编写员,会计师,审计员,财务经理等。每一组用户都有不同的数据库访问要求。
控制数据访问权限最简单的方法是,对于每一组用户,分别地为它创建一个满足该组用户权限要求的、
域内全局有效的组。我们既可以为每一个应用分别创建组,也可以创建适用于整个企业的、涵盖广泛用户类
别的组。然而,如果你想要能够精确地了解组成员可以做些什么,为每一个应用程序分别创建组是一种较好
的选择。例如,在前面的会计系统中,我们应该创建 Data Entry Operators、Accounting Data Entry
Managers 等组。请记住,为了简化管理,最好为组取一个能够明确表示出作用的名字。
除了面向特定应用程序的组之外,我们还需要几个基本组。基本组的成员负责管理服务器。按照习惯,
我们可以创建下面这些基本组:SQL Server Administrators,SQL Server Users,SQL Server Denied
Users,SQL Server DB Creators,SQL Server Security Operators,SQL Server Database Security
Operators,SQL Server Developers,以及 DB_Name Users(其中 DB_Name 是服务器上一个数据库的名
字)。当然,如果必要的话,你还可以创建其他组。
创建了全局组之后,接下来我们可以授予它们访问 SQL Server 的权限。首先为 SQL Server Users 创建一
个 NT 验证的登录并授予它登录权限,把 Master 数据库设置为它的默认数据库,但不要授予它访问任何其他数
据库的权限,也不要把这个登录帐户设置为任何服务器角色的成员。接着再为 SQL Server Denied Users 重复
这个过程,但这次要拒绝登录访问。在 SQL Server 中,拒绝权限始终优先。创建了这两个组之后,我们就有
了一种允许或拒绝用户访问服务器的便捷方法。
为那些没有直接在 Sysxlogins 系统表里面登记的组授权时,我们不能使用 Enterpris Managr,因为 Enter-
prise Manager 只允许我们从现有登录名字的列表选择,而不是域内所有组的列表。要访问所有的组,请打开
Query Analyzer,然后用系统存储过程 sp_addsrvrolemember 以及 sp_addrolemember 进行授权。
对于操作服务器的各个组,我们可以用 sp_addsrvrolemember 存储过程把各个登录加入到合适的服务器
角色:SQL Server Administrators 成为 Sysadmins 角色的成员,SQL Server DB Creators 成为 Dbcreator 角
色的成员,SQL Server Security Operators 成为 Securityadmin 角色的成员。注意 sp_addsrvrolemember 存
储过程的第一个参数要求是帐户的完整路径。例如,BigCo 域的 JoeS 应该是 bigco/joes(如果你想用本地帐
户,则路径应该是 server_name/joes)。
要创建在所有新数据库中都存在的用户,你可以修改 Model 数据库。为了简化工作,SQL Server 自动把
所有对 Model 数据库的改动复制到新的数据库。只要正确运用 Model 数据库,我们无需定制每一个新创建的数
据库。另外,我们可以用 sp_addrolemember 存储过程把 SQL Server Security Operators 加入到 db_security-
admin,把 SQL Server Developers 加入到 db_owner 角色。
注意我们仍然没有授权任何组或帐户访问数据库。事实上,我们不能通过 Enterprise Manager 授权数
据库访问,因为 Enterprise Manager 的用户界面只允许我们把数据库访问权限授予合法的登录帐户。SQL
Server 不要求 NT 帐户在我们把它设置为数据库角色的成员或分配对象权限之前能够访问数据库,但 Enter-
prise Manager 有这种限制。尽管如此,只要我们使用的是 sp_addrolemember 存储过程而不是 Enterprise
Manager,就可以在不授予域内 NT 帐户数据库访问权限的情况下为任意 NT 帐户分配权限。
到这里为止,对 Model 数据库的设置已经完成。但是,如果你的用户群体对企业范围内各个应用数据库
有着类似的访问要求,你可以把下面这些操作移到 Model 数据库上进行,而不是在面向特定应用的数据库上
进行。
四、允许数据库访问
在数据库内部,与迄今为止我们对登录验证的处理方式不同,我们可以把权限分配给角色而不是直接把
它们分配给全局组。这种能力使得我们能够轻松地在安全策略中使用 SQL Server 验证的登录。即使你从来没
有想要使用 SQL Server 登录帐户,本文仍旧建议分配权限给角色,因为这样你能够为未来可能出现的变化做
好准备。
创建了数据库之后,我们可以用 sp_grantdbaccess 存储过程授权 DB_Name Users 组访问它。但应该注意的
是,与 sp_grantdbaccess 对应的 sp_denydbaccess 存储过程并不存在,也就是说,你不能按照拒绝对服务器访
问的方法拒绝对数据库的访问。如果要拒绝数据库访问,我们可以创建另外一个名为 DB_Name Denied Users
的全局组,授权它访问数据库,然后把它设置为 db_denydatareader 以及 db_denydatawriter 角色的成员。注
意 SQL 语句权限的分配,这里的角色只限制对对象的访问,但不限制对 DDL(Data Definition Language,数
据定义语言)命令的访问。
正如对登录过程的处理,如果访问标记中的任意 SID 已经在 Sysusers 系统表登记,SQL 将允许用户访问数
据库。因此,我们既可以通过用户的个人 NT 帐户 SID 授权用户访问数据库,也可以通过用户所在的一个(或
者多个)组的 SID 授权。为了简化管理,我们可以创建一个名为 DB_Name Users 的拥有数据库访问权限的全局
组,同时不把访问权授予所有其他的组。这样,我们只需简单地在一个全局组中添加或者删除成员就可以增
加或者减少数据库用户。
五、分配权限
实施安全策略的最后一个步骤是创建用户定义的数据库角色,然后分配权限。完成这个步骤最简单的方
法是创建一些名字与全局组名字配套的角色。例如对于前面例子中的会计系统,我们可以创建 Accounting
Data Entry Operators、Accounting Data Entry Managers 之类的角色。由于会计数据库中的角色与帐务处
理任务有关,你可能想要缩短这些角色的名字。然而,如果角色名字与全局组的名字配套,你可以减少混乱,
能够更方便地判断出哪些组属于特定的角色。
创建好角色之后就可以分配权限。在这个过程中,我们只需用到标准的 GRANT、REVOKE 和 DENY 命令。但
应该注意 DENY 权限,这个权限优先于所有其他权限。如果用户是任意具有 DENY 权限的角色或者组的成员,
SQL Server 将拒绝用户访问对象。
接下来我们就可以加入所有 SQL Server 验证的登录。用户定义的数据库角色可以包含 SQL Server 登录以
及 NT 全局组、本地组、个人帐户,这是它最宝贵的特点之一。用户定义的数据库角色可以作为各种登录的通
用容器,我们使用用户定义角色而不是直接把权限分配给全局组的主要原因就在于此。
由于内建的角色一般适用于整个数据库而不是单独的对象,因此这里建议你只使用两个内建的数据库角
色,即 db_securityadmin 和 db_owner。其他内建数据库角色,例如 db_datareader,它授予对数据库里面所
有对象的 SELECT 权限。虽然你可以用 db_datareader 角色授予 SELECT 权限,然后有选择地对个别用户或组拒
绝 SELECT 权限,但使用这种方法时,你可能忘记为某些用户或者对象设置权限。一种更简单、更直接而且不
容易出现错误的方法是为这些特殊的用户创建一个用户定义的角色,然后只把那些用户访问对象所需要的权
限授予这个用户定义的角色。
“怎么配置一个安全稳定的 SQL SERVER 的数据库”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!