[How To]如何给SQL Server配置证书

http://blogs.msdn.com/b/apgcdsd/archive/2011/01/20/how-to-sql-server.aspx


默认情况下从SQL Server 2005开始SQL Server会使用自动生成的证书来加密与客户的连接和数据包传输。你也可以给SQL Server配置你自己的证书来实现更高的安全性。

 

证书从哪里获得


你可以从第三方的证书颁发机构获得证书。你也可以选择使用工具制作自签名的证书用作测试的用途,或者你可以从你企业内部的证书的服务器来申请证书用作企业内部使用。

要制作自签名的证书,你可以使用IIS 6.0 Resource Kit中的SelfSSL工具(如果你的机器上有安装IIS的话)。在命令行中,输入以下命令:

selfssl.exe /N:CN=<FQDN> /K:1024 /V:7 /S:1 /P:442 /T

注意你需要将<FQDN>替换成你SQL Server服务器主机的实际FQDN。然后你会被询问“Do you want to replace the SSL settings for site 1 (Y/N)”。输入”Y”。这样证书就会被自动安装到本机的Certificate store中去。

如果你的机器上没安装IIS的话,你可以使用.NET SDK中的makecert工具来制作自签名的证书。大致方法如下:

1.使用makecert工具来生成pvk和cer文件。

makecert -r -pe -sv c:\test.pvk -n "CN=<FQDN>" -b 01/01/2000 -e 01/01/2036 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 c:\test.cer

2.使用pvk2pfx工具生成pfx文件。

pvk2pfx.exe -pvk c:\test.pvk -spc c:\test.cer -pfx c:\test.pfx -po <password>

请注意你仍需要将<FQDN>替换成你SQL Server服务器主机的实际FQDN,<password>也要更换成实际的密码。得到证书后,你需要将证书安装到certificate store(根据SQL Sever的启动账号决定是local computer或current user store)的personal以及"Trusted Root Certification Authorities"目录下。

如果你的企业内部有证书服务器的话,你也可以从那里来申请证书。这里我用Windows Server自带的Certificate Authority(CA)为例。

1.       访问CA的网站来申请证书。申请时,name部分要填写SQL Server主机的FQDN,Type of Certificate Needed需要选择Server Authentication Certificate。Key Options要选exchange或者Both。如果你需要证书可以被重复导入导出,要勾选"Mark keys as exportable"。你也可以勾选"Store certificate in the local computer certificate store",这样你在下载证书的时候就可以直接安装到本机的certificate  store里去了。

 

  

 

2.       等到证书被核发之后,你就可以通过CA的网站来下载证书了。同样的,也需要将证书安装到Certificate store的personal以及"Trusted Root Certification Authorities"目录下。

 

 

 

证书的配置


我们先来了解下SQL Server装载证书的步骤。

1.       SQL Server 搜索HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\SuperSocketNetLib\Certificate。通过Certificate键值中记录的证书的thumbprint来到certificate store中寻找相应的证书。如果找不到该证书,则SQL Server启动失败。

2.       如果Certificate键值为空,则SQL Server到certificate store中去寻找subject CN与SQL Server服务器主机的FQDN相同的证书。如果有这样的证书存在,SQL Server就读取第一个它找到的证书,装载并启动。

3.       如果还是找不到证书,则SQL Server就自动生成一个证书并使用这个证书启动。

有人可能是通过SQL Server configuration manager来选择证书并将它配置给SQL Server的。其实SQL Server configuration manager也是通过写Certificate键值来达到配置证书的目的。另外要注意的是SQL Server configuration manager中的下拉列表只能显示那些subject CN与SQL Server服务器主机的FQDN相同的证书。因此如果你需要配置一个CN与SQL Server服务器主机的FQDN不同的证书的话(除非是cluster环境,否则不推荐这样做,可能导致客户端连接问题),就需要使用手动修改Certificate键值的方法。

其次,如果不指定Certificate键值的话,则SQL Server自动搜索Certificate store中符合要求的证书。此时如果存在多个证书的话,我们是无法控制SQL Server选择哪个证书的。理论上SQL Server使用它找到的“第一个”证书,但是我们不能确定第一个证书是哪个。

基于上述的考虑,为了确定SQL Server使用我们想要的证书,我们推荐永远使用编辑Certificate注册表键值的方式来配置证书。具体的配置方式是:

1.       在Certificate中打开要使用的证书,复制其thumbprint。

2.       如果HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\SuperSocketNetLib\Certificate不存在的话,就手动创建一个。需要注意的是,对于SQL Server 2000的,键值的类型是binary,对于SQL Server 2005及以后版本的SQL Server,键值的类型是string。

3.       对于SQL Server 2000,将thunbprint的值逐个输入到certificate键值中去。对于SQL Server 2005及以后版本的SQL Server,将thumbprint中的空格全部删除,然后复制到certificate键值中去。

最后,对于cluster环境下的SQL Server,由于证书的subject CN域等于SQL Server的虚拟网络名而不是某个节点的FQDN,因此无论你在哪个节点使用SQL Server Configuration Manager都是看不到该证书的,所以cluster环境下我们需要在所有cluster节点上手动编辑Certificate键值来为SQL Server配置证书。

当证书被成功配置后,我们启动SQL Server,然后检查SQL Server的error log。如果看到这么一句话:

 

The certificate was successfully loaded for encryption.

 

 

那么我就可以确认证书配置成功了。从SQL Server 2008开始,上述信息后面还会附带所装载证书的thumbprint,方便你进一步确认SQL Server确实使用了你所指定的证书。


<think>好的,用户现在的问题是如何在Linux上启动OceanBase的SQL服务(可能是SQL*Plus或者类似工具)。之前用户询问过关于从Oracle迁移到OceanBase时遇到的序列问题,现在可能正在尝试实际部署和连接OceanBase,所以需要启动相关服务进行测试或操作。 首先,我需要确定用户提到的“sqlr”具体指什么。在OceanBase的语境中,可能是指SQL命令行工具,比如obclient或者OceanBase自带的客户端工具。可能用户误写为“sqlr”,或者是指某个特定组件。需要先明确这一点,但根据常见情况,假设用户是想启动OceanBase数据库服务并连接到SQL客户端。 接下来,用户可能是在Linux环境下部署OceanBase,但不确定他们是否已经安装好了OceanBase,或者是否只是安装了客户端工具。需要分步骤指导,包括安装、启动服务、连接客户端等。同时,用户可能对OceanBase的架构不太熟悉,比如单机部署和集群部署的区别,是否需要先启动observer进程等。 另外,用户之前遇到的问题涉及迁移工具OMS,可能在迁移过程中需要连接到OceanBase执行SQL命令,所以启动SQL客户端是必要的一步。需要确保用户正确安装了OceanBase的客户端工具,比如obclient,并且配置了正确的连接信息,如主机地址、端口、用户名、密码、租户名等。 可能用户遇到的困难包括如何安装客户端工具,如何确认OceanBase服务已经启动,以及连接时的参数设置。需要详细说明每个步骤,包括检查服务状态、安装客户端、连接命令示例,以及常见问题的解决方法,比如防火墙设置、密码错误等。 最后,需要给出验证连接成功的方法,比如执行简单的SQL语句,确保用户能够正确操作数据库。同时提醒用户注意部署模式的不同(如Docker部署可能需要不同的步骤),以及官方文档的重要性,确保用户能够进一步查阅资料解决问题。</think>------------- ### **分步骤说明:如何启动OceanBase SQL服务(以Linux为例)** ------------- #### **步骤1:确认OceanBase部署模式** OceanBase的SQL服务依赖**observer进程**运行,需先明确部署方式: 1. **单机测试模式**:通过`obd`工具快速部署(适合开发测试) 2. **生产集群模式**:需配置多节点(需要ZooKeeper/OceanBase RootService) 👉 **本文以单机部署为例**,使用OceanBase官方工具`obd`进行操作。 ------------- #### **步骤2:启动OceanBase服务** 1. **检查observer进程状态**: ```bash obd cluster list # 查看已部署的集群名称 obd cluster display <cluster-name> # 检查节点状态 ``` 2. **启动/重启服务**: ```bash obd cluster start <cluster-name> # 首次启动 obd cluster restart <cluster-name> # 若已部署但未运行 ``` 3. **验证服务状态**: ```bash netstat -ntlp | grep 2881 # 默认SQL端口2881应处于LISTEN状态 ``` ------------- #### **步骤3:连接SQL客户端(obclient)** 1. **安装obclient**: ```bash # CentOS/RHEL sudo yum install obclient # Ubuntu/Debian sudo apt-get install obclient ``` 2. **基础连接命令**: ```bash obclient -h<IP> -P<PORT> -u<USER> -p<PASSWORD> -D<DATABASE> -c -A ``` - **示例**(连接默认sys租户): ```bash obclient -h127.0.0.1 -P2881 -uroot@sys -p"" -Doceanbase -c -A ``` 3. **关键参数说明**: | 参数 | 典型值 | 说明 | |------------|-------------------------|--------------------------------| | `-h` | 127.0.0.1 | 服务器IP(若本地部署用回环地址)| | `-P` | 2881 | SQL服务端口 | | `-u` | root@sys 或 user@tenant | 用户名@租户名 | | `-p` | 空密码或自定义密码 | 密码(空密码需用`-p""`) | | `-D` | oceanbase | 默认数据库 | | `-c` | N/A | 启用交互模式 | | `-A` | N/A | 禁止自动重连 | ------------- #### **步骤4:验证SQL执行** 连接成功后,执行测试命令: ```sql SHOW DATABASES; -- 查看数据库列表 SELECT @@version; -- 查询OceanBase版本 ``` ------------- ### **常见问题处理** #### **问题1:连接超时** - **现象**:`ERROR 2013 (HY000): Lost connection to server` - **解决方案**: 1. 检查防火墙是否开放2881/2882端口: ```bash sudo firewall-cmd --list-ports # CentOS sudo ufw status # Ubuntu ``` 2. 确认observer进程正常运行: ```bash ps -ef | grep observer ``` #### **问题2:认证失败** - **现象**:`ERROR 1045 (28000): Access denied` - **解决方案**: 1. 确认密码是否正确(新部署默认root密码为空) 2. 检查用户是否绑定到正确的租户: ```sql -- 在OceanBase中查询用户权限 SELECT * FROM oceanbase.__all_user; ``` ------------- ### **扩展:Docker快速启动(备选方案)** 若需快速测试,可直接使用OceanBase官方Docker镜像: ```bash # 拉取镜像 docker pull oceanbase/oceanbase-ce # 启动容器 docker run -p 2881:2881 --name ob -d oceanbase/oceanbase-ce # 进入容器并连接 docker exec -it ob /bin/bash obclient -h127.0.0.1 -uroot@sys -P2881 -p"" -A oceanbase ``` ------------- ### **关键总结** 1. 先通过`obd`启动observer进程,再通过`obclient`连接 2. 连接字符串必须包含**租户名**(如`root@sys`) 3. 生产环境需替换`127.0.0.1`为实际服务器IP,并配置安全组规则 建议参考[OceanBase官方文档](https://www.oceanbase.com/docs)获取最新配置细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值