C#如何检测所连接的SQL数据库是Amazon RDS或Azure SQL这类PaaS服务
PaaS模式SQL数据库检测方案(适配Azure SQL、Amazon RDS for SQL Server)
以下方案均使用普通数据库连接权限即可执行,无高权限要求,误判率可忽略:
1. Azure SQL 检测
现有检测逻辑可保留,补充冗余校验进一步降低误判概率:
- 核心校验:执行
SELECT SERVERPROPERTY('edition'),返回值包含SQL Azure即可判定 - 冗余校验:执行
SELECT @@VERSION,返回值包含Azure SQL Database即可判定
两个条件满足其一即可标记为Azure SQL PaaS实例。
2. Amazon RDS for SQL Server 检测
RDS实例存在多个稳定专属特征,可组合校验解决SERVERPROPERTY返回值无法识别的问题:
- 特征1:RDS默认预装专属系统存储过程,可通过系统目录查询是否存在:
返回结果大于0即可判定为RDS实例。SELECT COUNT(*) FROM sys.procedures WHERE name = 'rds_show_configuration' - 特征2:RDS默认实例域名带专属后缀,可通过服务器名校验:
返回值为1即可判定为RDS实例。SELECT CASE WHEN @@SERVERNAME LIKE '%.rds.amazonaws.com' THEN 1 ELSE 0 END AS is_rds
两个特征满足其一即可标记为Amazon RDS PaaS实例,极端场景下存在自定义域名映射的RDS实例可两个特征组合校验,覆盖100%场景。
工具落地逻辑建议
按顺序执行上述检测逻辑,命中任意一类PaaS实例后,直接禁用内置备份恢复功能即可;未命中则判定为自托管SQL实例,保留原有功能。
内容的提问来源于stack exchange,提问作者EMaster
相关产品推荐
相关产品推荐

