当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 每个数据库管理员都应该了解的 6 个 SQL Server 安全基础知识

作者:精品下载站 日期:2024-12-14 06:05:17 浏览:13 分类:玩电脑

每个数据库管理员都应该了解的 6 个 SQL Server 安全基础知识


太多的数据泄露是由于数据库服务器安全性较差造成的。 Microsoft SQL Server 是一种流行的企业解决方案,但理解和配置也很复杂。您应该了解以下 6 个 SQL Server 安全功能,以保护您的服务器数据。

1. SQL Server 身份验证与 Windows 身份验证

Microsoft SQL Server 支持两种身份验证选项:

  • Windows 身份验证 依靠 Active Directory (AD) 在用户连接到 SQL 之前对用户进行身份验证。这是推荐的身份验证模式,因为 AD 是管理密码策略以及组织中的应用程序的用户和组访问权限的最佳方式。
  • SQL Server 身份验证的工作原理是在数据库服务器上存储用户名和密码。它可以在 Active Directory 不可用的情况下使用。

您可以同时使用 SQL Server 和 Windows 身份验证(混合模式),但只要可能,请只使用 Windows 身份验证。

如果必须使用 SQL Server 身份验证,请确保默认 sa 帐户已禁用或具有经常更改的强密码,因为此帐户经常成为黑客的攻击目标。可以使用 SQL Server Management Studio 服务或 ALTER LOGIN Transact-SQL (T-SQL) 命令来管理 SQL Server 帐户,包括 sa(如果已启用)。

2. 服务器登录和角色

无论您选择哪种身份验证方法,都可以为 SQL 实例配置两种类型的登录:用户登录和服务器登录。我将在下一节中讨论用户登录。服务器登录允许用户建立与 SQL Server 实例的连接。每个服务器登录都被分配一个或多个服务器角色,使其能够在实例上执行特定操作。默认情况下,服务器登录名被分配公共服务器角色,该角色提供对实例的基本访问权限。其他可用角色包括 bulkadminsercurityadmindbcreatorserveradmin

可以使用 T-SQL 或 SQL Server Management Studio 创建服务器登录名。创建服务器登录名时,必须指定默认数据库。服务器登录名与默认数据库中的用户登录名相关联。值得注意的是,服务器登录名与其关联的用户登录名不需要匹配。如果默认数据库中没有关联的用户对象,则服务器登录名将被拒绝访问,除非分配给该登录名的服务器角色有权访问所有数据库。服务器登录名可以映射到一个或多个数据库中的用户,并且您可以在设置服务器登录名时创建用户。

3. 数据库用户、模式和角色

创建用户登录名时,您需要指定与其关联的数据库、用户名和默认架构,如果未指定其他架构,则默认架构将应用于用户创建的所有对象。 SQL Server 架构是对象的集合,例如表和视图,在逻辑上与其他数据库对象分开,这使得管理访问变得更容易,并且意味着在对数据库运行 T-SQL 命令时无需使用架构名称。

用户定义对象的默认架构是dbo。另一个默认架构是sys;它拥有所有系统对象。

与为服务器登录分配服务器角色的方式相同,为用户登录分配数据库角色,从而分配数据库中的权限。服务器数据库角色包括publicdbaccessadmindb Ownerdb securityadmin

4. 担保物和权限

当服务器或数据库角色授予用户过多或过少的访问权限时,您可以分配一个或多个安全对象。安全性存在于服务器、模式和数据库级别;它们是可由服务器和用户登录访问的 SQL Server 资源。例如,使用安全性,您可以仅授予服务器登录对特定表或函数的访问权限,这是通过将角色分配给登录而无法实现的粒度级别。

权限用于授予对 SQL Server 安全对象的访问权限。您可以授予仅查看数据或仅修改数据的权限。 GRANT、DENY 和 REVOKE T-SQL 语句用于配置权限。

然而,权限可能很复杂。例如,对安全对象设置 DENY 权限会阻止对较低级别对象的权限继承。但列级 GRANT 权限会覆盖对象级别的 DENY,因此表上设置的 DENY 权限会被列上的 GRANT 权限覆盖。由于权限可能很复杂,因此始终值得使用 T-SQL 检查有效权限。以下命令确定 JoeB 对对象授予的权限,在本例中是一个名为“employees”的表。

SELECT * FROM fn_my_permissions('joeb', 员工);

5. 数据加密

SQL Server 支持多种加密选项:

  • 安全套接字层 (SSL) 对服务器实例和客户端应用程序之间传输的流量进行加密,就像浏览器和服务器之间的互联网流量受到保护一样。此外,客户端可以使用服务器的证书来验证服务器的身份。
  • 透明数据加密 (TDE) 对磁盘上的数据进行加密。更具体地说,它加密整个数据和日志文件。启用 TDE 时无需更改客户端应用程序
  • 备份加密与 TDE 类似,但加密 SQL 备份而不是活动数据和日志文件。
  • 列/单元格级加密可确保特定数据在数据库中加密,并且即使存储在内存中也保持加密状态。数据使用函数进行解密,需要更改客户端应用程序
  • 始终加密是对列/单元级加密的改进,因为它不需要对客户端应用程序进行任何更改;数据在网络、内存和磁盘上保持加密状态。它还可以保护敏感数据免遭特权 SQL Server 用户的窥探。但您可能会遇到此加密选项的一些问题 - 因为 SQL Server 无法读取数据,某些索引和功能将无法工作。

6.行级安全性

行级安全性 (RLS) 允许组织控制谁可以查看数据库中的行。例如,您可以限制用户只能看到包含有关其客户的信息的行。

RLS由三个主要部分组成:谓词函数、安全谓词和安全策略。谓词函数根据逻辑检查执行数据库查询的用户是否可以访问行。例如,您可以检查运行查询的用户的用户名是否与该行的列之一中的字段匹配。谓词函数和安全谓词在函数中一起定义,以静默过滤查询结果而不引发错误,或者在行访问被拒绝时阻止并出现错误。最后,安全策略将函数绑定到表。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯