SQL Azure:确保 SQL Azure 的安全

安全性与托管解决方案同等重要,尽管使用的工具和策略不尽相同。

Joshua Hoffman

云计算最近已成为 IT 基础结构的内在基础。 虽然内部部署计算确实一直都扮演着重要角色,但托管解决方案正凭借其可伸缩性、灵活性以及节省成本等优点而占据主导地位,这些优点对于灵活的组织而言已经变得非常重要。 在进行数据管理时情况更是如此。

SQL Azure 就是这类云平台的一个很好的示例。 SQL Azure 是一个功能强大且为人熟知的基础结构,用于存储、管理和分析数据。 它还带来了云计算的好处。 共享的托管基础结构有助于减少直接和间接成本,即付即用模式有助于实现更好的效益,另外还内置了高可用性和容错能力。

虽然云计算有诸多好处,但将数据迁移到 SQL Azure 之类的基于云的解决方案却会使处理 IT 管理概念(如安全性)的方式发生改变。 安全模型可能会有所不同,但为了确保数据尽可能安全,仍有许多因素需要考虑,包括访问控制方法、身份验证方法和加密方法。

SQL Azure 入门

如果您刚刚接触 SQL Azure,入门很轻松。 尤其是当您已经熟悉传统的 SQL Server 管理工具时,例如 SQL Server Management Studio(自 SQL Server 2008 R2 版本开始,还可用来管理 SQL Azure 实例)。

第一步是通过访问 Microsoft Online Services 客户门户为 Windows Azure 平台设置一个帐户。 有了帐户后,您就可访问包括 Windows Azure、SQL Azure 和 Windows Azure AppFabric(向开发人员提供一种跨组织和网络边界连接应用程序和服务的方式)在内的 Windows Azure 服务。

建立帐户之后,您就可以通过访问 sql.azure.com 来访问 SQL Azure 控制面板。 单击“新建数据库服务器”创建新的 SQL Azure 实例。

网络访问控制

为了保护您的数据,在您允许从特定计算机进行访问之前,SQL Azure 防火墙会阻止对您的数据库的所有访问。 通过 SQL Azure 防火墙进行的访问基于源 IP 地址。 您可通过 Windows Azure 平台管理门户(参见图 1)或利用存储过程直接在 master 数据库中对此进行管理。

请按照以下这些步骤配置 SQL Azure 防火墙规则:

  1. 登录 Windows Azure 平台管理门户。
  2. 在左窗格中单击“数据库”。
  3. 在左窗格中,展开您的订阅,然后单击要为其配置防火墙规则的 SQL Azure 服务器。
  4. 单击“防火墙规则”列出规则。
  5. 单击“添加”创建新的防火墙规则。 要允许其他 Windows 服务来访问此 SQL Azure 服务器,请选中"允许其他 Windows Azure 服务来访问此服务器"。它将创建一个规则的 IP 范围"0.0.0.0 — — 为 0.0.0.0。"更新和删除规则,可以使用相同的过程。

**注意:**每条防火墙规则都必须有唯一名称(不区分大小写)。

图 1 在 SQL Azure 中配置防火墙规则。

有关通过 SQL 存储过程配置防火墙规则的详细信息,请参阅使用 T-SQL 更改防火墙规则

通过 TCP 端口 1433年,SQL Azure 服务是可用的。 取决于您现有的防火墙策略,您也可能需要配置客户端计算机,允许通过该端口的出站访问权限。 有关此过程的详细信息,请参阅配置客户端防火墙

SQL 身份验证

SQL Azure 中的身份验证方法基于传统的 SQL Server 身份验证。 它不支持 Windows 身份验证(集成了安全性)。 每次连接到 SQL Azure 时您都必须提供凭据。

在 SQL Azure 中创建新数据库服务器时,系统会提示您可以创建服务器级别主体登录名和密码。 这相当于使用 SQL Server 系统管理员帐户。 您可以通过 Database Manager for SQL Azure 或 SQL Server Management Studio 2008 R2 使用 T-SQL 创建其他登录名。

您可以使用 CREATE LOGIN 命令通过 master 数据库创建和删除登录名。 例如,可以使用 Database Manager for SQL Azure 或 SQL Server Management Studio 连接到 master 数据库,然后执行以下查询:

--create a login named "testlogin"
CREATE LOGIN testlogin WITH password='Passw0rd!';

您可以使用图 2 中所示的命令来查询现有登录名。

图 2 使用 Database Manager for SQL Azure 查询 SQL Server 登录名。

创建了登录名之后,即可创建与这些登录名相关联的数据库级别的用户,然后为每个用户分配特定的数据库级别的权限。 若要为特定的数据库创建用户,请连接到相应的数据库并执行以下命令:

CREATE USER testuser FROM LOGIN testlogin;

接着您可以使用以下命令来分配权限:

EXEC sp_addrolemember 'db_datareader', 'testuser';

有关完整的角色列表,请参阅数据库级别的角色。 注意,当您执行 CREATE/ALTER/DROP LOGIN 语句或 CREATE/ALTER/DROP USER 语句(使用 FOR/FROM LOGIN 选项)时,其中的每个语句都必须是 T-SQL 批处理中的唯一语句。 否则将出现错误。

连接加密

SQL Azure 使用表格格式数据流 (TDS) 通过 SSL 连接传输数据。 SQL Azure 不支持未加密的连接,它具有证书颁发机构所颁发的签名证书。 这些因素都有助于确保安全数据传输且有助于防止中间人攻击。

加密握手发生在 TDS 协议的 PRELOGIN 流中。 通过 ADO.NET 与 SQL Azure 进行通信的所有客户端都需要进行加密握手,包括 SQL Server Management Studio 和应用程序。

若要通过 SQL Server Management Studio 对连接进行加密,请执行以下步骤:

  1. 打开 SQL Server Management Studio。
  2. 在“对象资源管理器”中,单击“连接”,然后单击“数据库引擎”。
  3. 在“连接到服务器”中,单击“连接属性”。
  4. 选择“加密连接”(参见图 3)。

图 3 在 SQL Server Management Studio 中加密与 SQL Azure 的连接。

若要使用 ADO.NET 应用程序代码验证证书,请在数据库连接字符串中设置 Encrypt=TrueTrustServerCertificate=False

数据加密

SQL Azure 当前不支持 SQL Server 所支持的标准数据加密机制。 这些机制包括透明数据加密、非对称密钥、对称密钥以及 ENCRYPTBYPASSPHRASE 和 DECRYPTBYPASSPHRASE、CREATE/ALTER/DROP DATABASE ENCRYPTION KEY 或 CREATE/ALTER/DROP MASTER KEY 等 Transact-SQL 函数。

使用 SQL Azure,您需要在应用程序级别进行加密或解密。 也就是说,在通过 SQL Azure 发送或检索数据时,您的应用程序负责数据加密和解密。

当您开始将某些应用程序和数据托管到云中时,必须一直留意数据是否安全。 还必须考虑基于云的安全体系结构。 安全需求始终都存在,只有云计算平台才会改变技术。 有关本主题的其他资源,请务必参阅 SQL Azure 安全准则和限制一文。

通过遵循帐户和连接管理最佳实践,可以确保获得将数据迁移到云所带来的所有好处。 您不必为了重要业务信息的安全而作出让步。

Joshua Hoffman

Joshua Hoffman 是前主编的 TechNet 杂志*.*他现在是一位独立作者和顾问,为客户提供关于技术和以“受众为本”营销的建议。Hoffman 也担当 ResearchAccess.com 的总编辑,该站点专门致力于不断增长和丰富的市场研究社区建设。他住在纽约城。

相关内容