MySQL可以检查X509证书的属性和基于用户名和密码的通用鉴定方法。要想为MySQL账户指定SSL相关选项,使用GRANT语句的REQUIRE子句。参见13.5.1.3节,“GRANT和REVOKE语法”。
有多种可能来限制一个账户的连接类型:
· 如果账户没有SSL或X509需求,如果用户名和密码合法,允许未加密的连接。但是,如果客户有正确的证书和密钥文件,在客户选项中可以使用加密连接。
· REQUIRE SSL选项限制服务器只允许该账户的SSL加密连接。请注意如果有ACL记录允许非SSL连接,该选项会被忽略。
· mysql> GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' · -> IDENTIFIED BY 'goodsecret' REQUIRE SSL;
· REQUIRE X509表示客户必须有合法证书但确切的证书、分发者和主体不重要。唯一的需求是应可以被某个CA认证机构验证它的签名。
· mysql> GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' · -> IDENTIFIED BY 'goodsecret' REQUIRE X509;
· REQUIRE ISSUER 'issuer'限制连接企图,即客户必须出示CA 'issuer'签发的合法X509证书。如果客户出示了一个合法证书,但是是由不同的分发者签发,服务器拒绝连接。使用X509证书表示要加密,因此不需要SSL选项。
· mysql> GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' · -> IDENTIFIED BY 'goodsecret' · -> REQUIRE ISSUER '/C=FI/ST=Some-State/L=Helsinki/ · O=MySQL Finland AB/CN=Tonu Samuel/Email=tonu@example.com';
请注意ISSUER值应做为单一字符串输入。
· REQUIRE SUBJECT 'subject' 限制连接企图,即客户必须出示主题为'subject'的合法X509证书。如果客户出示了一个合法证书,但是有不同的主题,服务器拒绝连接。
· mysql> GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' · -> IDENTIFIED BY 'goodsecret' · -> REQUIRE SUBJECT '/C=EE/ST=Some-State/L=Tallinn/ · O=MySQL demo client certificate/ CN=Tonu Samuel/Email=tonu@example.com';
请注意SUBJECT值应做为单一字符串输入。
· REQUIRE CIPHER 'cipher'用来确保使用足够强的密码和密钥长度。如果使用旧的短加密密钥算法,SSL本身可能很弱。使用该选项,我们可以索取确切的加密方法来连接。
· mysql> GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' · -> IDENTIFIED BY 'goodsecret' -> REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA';
在REQUIRE子句中,可以结合使用SUBJECT、ISSUER和CIPHER选项:
mysql> GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' -> IDENTIFIED BY 'goodsecret' -> REQUIRE SUBJECT '/C=EE/ST=Some-State/L=Tallinn/ O=MySQL demo client certificate/ CN=Tonu Samuel/Email=tonu@example.com' -> AND ISSUER '/C=FI/ST=Some-State/L=Helsinki/ O=MySQL Finland AB/CN=Tonu Samuel/Email=tonu@example.com' -> AND CIPHER 'EDH-RSA-DES-CBC3-SHA';
请注意SUBJECT和ISSUER值应做为单一字符串输入。
在MySQL 5.1中,在REQUIRE选项之间可以选用AND关键字。
选项的顺序不重要,但任何选项不能用两次。