ADOMD.NET 中的连接 - 建立安全连接

在 ADOMD.NET 中使用连接时,用于连接的安全方法取决于调用 的 方法时所使用的连接字符串 的 ProtectionLevelOpen 属性的值 AdomdConnection

ProtectionLevel 属性提供四个安全级别:未经身份验证、经过身份验证、签名和加密。 下表介绍这些不同的安全级别。

注意

如果选择使用数据库连接池,数据库将无法管理安全性。 这是因为数据库连接池要求连接字符串与池连接相同。 因此,您必须在其他位置管理安全性。

安全级别 ProtectionLevel 值
不要求身份验证的连接
不要求身份验证的连接不会进行任何形式的身份验证。 这种连接是最普遍支持的连接,但同时也是最不安全的连接。
要求身份验证的连接
要求身份验证的连接会对进行连接的用户进行身份验证,但是不保证其他通信的安全。 这种连接颇为有用,因为您可为连接到分析数据源的用户或应用程序建立标识。
“连接”
签名连接
签名连接会对请求连接的用户进行身份验证,而且确保传输不会被修改。 在必须验证传输数据的真实性时,这种连接非常有用。 但签名连接仅可防止数据包的内容被修改。 在传递的过程中仍可查看这些内容。



请注意,只有 MicrosoftSQL ServerAnalysis 服务提供XML for Analysis提供程序才支持已签名的连接。
Pkt 完整性PktIntegrity
加密连接
加密连接是 ADOMD.NET 使用的默认连接类型。 这种连接会对请求连接的用户进行身份验证,还会对所传输的数据进行加密。 加密连接是 ADOMD.NET 可创建的最安全的连接形式。 数据包的内容不能被查看或修改,因而可以使数据在传输过程中得到保护。



加密连接仅受 XML for Analysis ServerAnalysis 服务提供SQL支持。
Pkt 隐私PktPrivacy

但是,并非所有类型的连接都可使用全部安全级别:

  • TCP 连接可以使用这四种安全级别中的任意一种。 实际上,在与 Windows 集成安全性一起使用时,TCP 连接可提供最安全的连接分析数据源的方法。

  • HTTP 连接只能是要求身份验证的连接。 因此,ProtectionLevel 属性必须设置为 连接。

  • HTTPS 连接只能是加密连接。 因此, ProtectionLevel 属性必须设置为 Pkt Privacy 或PktPrivacy

保护 TCP 连接的安全

对于 TCP 连接, ProtectionLevel 属性支持所有四个安全级别,如下表所示。

ProtectionLevel 值 是否用于 TCP 连接? 结果
指定不要求身份验证的连接。

TCP 流从访问接口请求,但是不会对请求该流的用户执行任何形式的身份验证。
“连接” 指定要求身份验证的连接。

从提供程序请求 TCP 流,然后针对服务器对请求流的用户的安全上下文进行身份验证:如果身份验证成功,则不执行任何其他操作。 如果身份验证失败,则 AdomdConnection 对象会断开与多维数据源的连接,并引发异常。

验证成功或失败后,会释放用于验证该连接的安全上下文。
Pkt 完整性PktIntegrity 指定签名连接。

从提供程序请求 TCP 流,然后针对服务器对请求流的用户的安全上下文进行身份验证:



如果身份验证成功,对象 AdomdConnection 将关闭现有的 TCP 流,并打开一个已签名的 TCP 流来处理所有请求。 对数据或元数据的每一请求都会使用打开连接时所用的安全上下文进行身份验证。 另外,对每个包都进行数字签名,以确保 TCP 包的负载没有经过任何方式的更改。



如果身份验证失败,则 AdomdConnection 对象会断开与多维数据源的连接,并引发异常。
Pkt 隐私PktPrivacy 指定加密连接。



请注意,还可通过不在连接字符串中设置 ProtectionLevel 属性来指定加密连接。



TCP 流从访问接口请求,然后在服务器上对请求该流的用户的安全上下文进行身份验证:



如果身份验证成功,对象 AdomdConnection 将关闭现有的 TCP 流,并打开加密的 TCP 流来处理所有请求。 对数据或元数据的每一请求都会使用打开连接时所用的安全上下文进行身份验证。 另外,每一 TCP 包的负载都会使用该访问接口和多维数据源都支持的最高级别加密方法进行加密。



如果身份验证失败,则 AdomdConnection 对象会断开与多维数据源的连接,并引发异常。

对连接使用 Windows 集成安全性

Windows安全性是建立和保护与实例的连接的最安全Analysis Services。 Windows 集成安全性不会在身份验证过程中泄露安全凭据,如用户名或密码,而是使用当前运行进程的安全标识符来确立标识。 对于大多数客户端应用程序,此安全标识符代表当前登录用户的标识。

若要使用 Windows 集成安全性,连接字符串需要以下设置:

  • 对于 "集成安全性 "属性,请不要设置此属性或将此属性设置为 SSPI

    注意

    Windows集成安全性仅适用于 TCP 连接,因为 HTTP 连接必须使用"集成安全性"属性的"基本"设置。

  • 对于 ProtectionLevel 属性,将此属性设置为 连接、Pkt 完整性Pkt 隐私

保护 HTTP 连接的安全

HTTPS 和安全套接字层 (SSL) 可用于从外部保护与分析数据源之间的 HTTP 通信。

因为 XMLA 访问接口仅使用安全 HTTP,所以 ADOMD.NET 中的 HTTP 连接必须是签名连接,如下表所示。

ProtectionLevel 值 用于 HTTP 还是 HTTPS
“连接” HTTP
Pkt 完整性PktIntegrity
Pkt 隐私PktPrivacy HTTPS

打开安全 HTTP 连接

以下示例演示如何使用 ADOMD.NET 打开 AdventureWorksAS 示例数据库的 HTTP Analysis Services连接:

Public Function GetAWEncryptedConnection( _  
    Optional ByVal serverName As String = "https:\\localhost\isapy\msmdpump.dll") _  
    As AdomdConnection  
  
    Dim strConnectionString As String = ""  
    Dim objConnection As New AdomdConnection  
  
    Try  
        ' To establish an encrypted connection, set the   
        ' ProtectionLevel setting to PktPrivacy.  
        strConnectionString = "DataSource=" & serverName & ";" & _  
            "Catalog=AdventureWorksAS;" & _  
            "ProtectionLevel=PktPrivacy;"  
  
        ' Note that username and password are not supplied here.  
        ' The current security context is used for authentication  
        ' purposes.  
  
        objConnection.ConnectionString = strConnectionString  
        objConnection.Open()  
    Catch ex As Exception  
        objConnection = Nothing  
        Throw ex  
    Finally  
        ' Return the encrypted connection.  
        GetAWEncryptedConnection = objConnection  
    End Try  
End Function