你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于:Azure SQL 数据库
构建可缩放云数据库使用三种不同类型的凭据来访问分片映射管理器。 使用凭据时,应根据具体需求尽可能采用最低的访问级别。
- 管理凭据:用于创建或操作分片映射管理器。 (请参阅词汇表。)
- 访问凭据:用于访问现有分片映射管理器以获取有关分片的信息。
- 连接凭据:用于连接到分片。
有关详细信息,请参阅 授权数据库访问 Azure SQL 数据库。
关于管理凭据
管理凭据用于为处理分片映射的应用程序创建一个 ShardMapManager
(Java,.NET)对象。 (有关示例,请参阅使用弹性数据库工具添加分片和数据相关路由)。 弹性缩放客户端库的用户创建 SQL 用户和 SQL 登录名,并确保授予每个 SQL 用户/登录名对全局分片映射数据库以及所有分片数据库的读/写权限。 对分片映射执行更改时,可使用这些凭据维护全局分片映射和本地分片映射。 例如,使用管理凭据创建分片映射管理器对象(使用 GetSqlShardMapManager
(Java, .NET):
// Obtain a shard map manager.
ShardMapManager shardMapManager = ShardMapManagerFactory.GetSqlShardMapManager(smmAdminConnectionString,ShardMapManagerLoadPolicy.Lazy);
smmAdminConnectionString
变量是包含管理凭据的连接字符串。 用户 ID 和密码提供对分片映射数据库和单个分片的读/写访问权限。 管理连接字符串还包括服务器名称和数据库名称,以标识全局分片映射数据库。 下面是用于此目的的典型连接字符串:
"Server=<yourserver>.database.windows.net;Database=<yourdatabase>;User ID=<yourmgmtusername>;Password=<yourmgmtpassword>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;"
不要以“username@server”的形式使用值,而只需使用“username”值。 这是因为凭据必须同时适用于分片映射管理器数据库和单个分片,这些分片可以位于不同的服务器上。
访问凭据
在不管理分片映射的应用程序中创建分片映射管理器时,请使用对全局分片映射具有只读权限的凭据。 在这些凭据下从全局分片映射检索到的信息可用于数据相关路由,以及用于填充客户端上的分片映射缓存。 通过与 GetSqlShardMapManager
相同的调用模式提供凭据:
// Obtain shard map manager.
ShardMapManager shardMapManager = ShardMapManagerFactory.GetSqlShardMapManager(smmReadOnlyConnectionString, ShardMapManagerLoadPolicy.Lazy);
请注意,使用 smmReadOnlyConnectionString
反映为 非管理员 用户提供访问的不同凭据,这些凭据不应在全局分片映射上提供写入权限。
连接凭据
使用 OpenConnectionForKey
(Java, .NET)方法访问与分片密钥关联的分片时,需要额外的凭据。 这些凭据需要提供对驻留在该分片上的本地分片映射表的只读访问权限。 若要对分片上数据相关的路由执行连接验证,则需要此凭据。 此代码片段允许在使用数据相关路由的情况下进行数据访问:
using (SqlConnection conn = rangeMap.OpenConnectionForKey<int>(targetWarehouse, smmUserConnectionString, ConnectionOptions.Validate))
在此示例中, smmUserConnectionString
保存用户凭据的连接字符串。 对于 Azure SQL 数据库,下面是用户凭据的典型连接字符串:
"User ID=<yourusername>; Password=<youruserpassword>; Trusted_Connection=False; Encrypt=True; Connection Timeout=30;"
如同管理员凭据一样,不要使用username@server
形式的值。 请改用 username
。 另请注意,连接字符串不包含服务器名称和数据库名称。 这是因为调用 OpenConnectionForKey
会根据键自动将连接定向到正确的分片。 因此,不提供数据库名称和服务器名称。
相关内容
尚未使用弹性数据库工具? 请查看入门指南。 如有问题,请在有关 SQL 数据库的 Microsoft Q&A 问题页面上联系我们;如有功能请求,请在 SQL 数据库反馈论坛添加新意见或为现有意见投票。