此篇文章为读书笔记
目录
语法:CREATE USER ‘user’[@’host’]
[ IDENTIFIED BY [ PASSWORD ] ‘password’ ] [ , … ]
有三种方法可以创建新用户:
1) create user ‘user’@’host’ identified by ‘password’;
2) grant usage on *.* to ‘user’@’host’ identified by ‘password’ ;
3) insert into mysql.user( host, user, password )
values ( ‘host’ , ’user’ , password( ’password’ ) );
需要使用PASSWORD()函数对密码进行加密,否则保存到mysql.user表中是明文。
使用insert语句添加的用户无法使用set password命令设置密码,可以使用
grant ….to ‘user’@’host’ identifiedby ‘password’ 或者 update 更新密码。
语法:DROP USER ‘user’@’host’
Ø 使用DROP USER 语句可以删除MySQL服务器上的所有用户,包括用户账户和来自所有授权表的特权。
Ø 删除用户账户并不会影响它们当前的会话,只有用户结束打开的会话时才会起作用,因为删除用户会删除用户的授权信息,所以此时无法执行show grants查看自己的权限。
Ø 在MySQL5.0.2版本之前,DROPUSER不能删除具有全局权限的用户,这样需要提前执行REVOKE语句:
REVOKE ALL ON *.* FROM ‘user’@’host’;
DROP USER ‘user’@’host’;
如果这样还不能删除用户,则需要使用DELETE语句从mysql.user表中删除记录。
语法:RENAME USER ‘user’ [ @‘host’ ] TO ‘new_name’[@‘host’ ] [ , … ]
使用该语句可以改变用户名 或者 原有用户的主机。不会影响用户的权限。
语法:SET PASSWORD [ FOR ‘user’@’host’ ] = PASSWORD ( ‘password’ )
其他方法,更新mysql.user表中password列:
Ø grant privileges_name on ‘db.table’ to ‘user’@’host’ identified by ‘password’;
Ø update mysql.user set password=password(‘new_password’) where user=’user_name’and host=’host_name’ ; 不要忘记使用PASSWORD()函数对口令进行加密!
Ø 使用mysqladmin工具:mysqladmin –uroot –p password
语法:SHOW GRANTS [ FOR ‘user’[@’host’ ] ]
显示给定用户的GRANT语句。如果没有指定FOR语句,默认为当前用户。如果给定的用户名没有参考特定的主机,则默认为使用通配符%。
语法:SHOW PRIVILEGES
显示MySQL服务器支持的系统权限。
重载MySQL临时缓存 FLUSH
语法:FLUSH [ LOCAL | NO_WRITE_TO_BINLOG ] option [, … ]
选项(option):
选项 | 说明 |
DES_KEY_FILE | 重新加载EDS加密文件 |
HOSTS | 清空主机缓存,减少主机/IP地址的查找 |
LOGS | 关闭并重新打开所有LOG文件 |
PRIVILEGES | 从授权表中重新载入用户权限 |
QUERY CACHE | 对查询缓存进行碎片整理以提高性能 |
TABLE [ table, … ] | 关闭指定的表,如果没有指定表名,同TABLES效果 |
TABLES | 关闭所有的表,终止所有查询,刷新查询缓存 |
TABLES WITH READ LOCK | 关闭所有的表并锁定具有全局读锁定的表,此时只能查看数据 |
USER_RESOURCES | 重置所有用户资源值,该值每小时计算一次。有mysql.user表中的max_questions、max_updates、max_connections列 |
MASTER | 重置用户复制的主服务器。删除索引文件里面列出的二进制日志文件,清空二进制日志索引文件,然后重建二进制日志文件。 |
STATUS | 重置会话值和计算器并把主要的缓存置为0 |
SLAVE | 重置数据库复制的从属服务器,删除已有的relay log,启动新的relay log,同时删除主服务器的binary log中的复制位置。 |
选项:
DES_KEY_FILE, HOSTS, LOGS, MASTER,PRIVILEGES, QUERY_CACHE, STATUS,
TABLE, TABLES, TABLES WITH READ LOCK,USER_RESOURCES
使用FLUSH语句可以清除病重载MySQL的临时缓存。执行FLUSH命令需要拥有RELOAD权限。使用NO_WRITE_TO_BINARYLOG标记或其别名LOCAL,可以防止FLUSH语句写入二进制文件。FLUSH不能用在存储函数和触发器中,但是可以用在存储过程中。
语法:RESET [ QUERYCACHE | MASTER|SLAVE ]
使用RESET语句来重置某些服务器的环境和日志文件。
Ø QUERY CACHE会清空包含查询结果的缓存。
Ø MASTER选项会重置用户复制的主服务器,启动一个新的二进制日志文件,也会删除索引文件中出现的二进制日志文件名并删除二进制日志索引文件的内容。
Ø SLAVE用于重置复制时的从属服务器,它将启动一个新的中继日志(relay log)文件,并删除所有已有的relay log,同时删除在主服务器的二进制日志文件中的复制位置。(详见主从服务器复制备份)
语法:
GRANT privileges [,…] [ ( column [,…] ) ] [,…]
ON [ TABLE |FUNCTION | PROCEDURE ] { [ { database | * } . { table | * } ] | * }
TO ‘user’@’host’ [ IDENTIFIED BY [PASSWORD ] ‘password’ ] [,…]
#授予权限、创建用户
[ REQUIRE NONE | [ { SSL | X509 } ][ CIPHER ‘cipher’ [ AND ] ]
[ ISSUER ‘issue’ [AND] ]
[ SUBJECT ‘subject’]
]
#限制连接类型
[WITH [ GRANT OPTION |
MAX_QUERIES_PER_HOUR count |
MAX_UPDATES_PER_HOUR count |
MAX_CONNECTIONS_PER_HOUR count |
MAX_USER_CONNECTIONS count ] . . . ]
]
#限制用户账户的信息
GRANT语句主要用户创建新用户、授予用户权限。权限可以是全局级的(mysql.user)、数据库级的(mysql.db)、表层级的(mysql.tables_priv)、列层级的(mysql.columns_priv)。可以通过函数和过程来限制用户的权限,通过连接数或每小时可以访问的最多资源数也可以限制用户的权限。
Ø 在ON字句中授予的权限可以限定为数据库、表、函数和过程。使用FUNCTION关键字限制函数的权限,PROCEDURE关键字限制过程的权限。用星号通配符可以指定所有的数据库、表、函数、或数据库提供的过程。
MySQL数据库不会级联收回子用户通过WITH GRANT OPTION参数授予给其他用户的权限。
Ø REQUIRE子句用于限制账户的连接类型。REQUIRE NONE是默认值,即可以不对连接类型做出限制。REQUIRE SSL选项限制用户只可以进行SSL加密连接。
Ø WITH子句指定连接次数和数目的限制。
MAX_QUERIES_PER_HOURS每小时执行查询的最大数量,
MAX_UPDATES_PER_HOUR在UPDATE语句中用户每小时发出的最大更新数目。
MAX_CONNECTIONS_PER_HOUR用户每小时可以同时连接的服务器的最大数量。
例如:
GRANT SELECT ON db_test.*
TO ‘test’@’%’
WITH MAX_QUERIES_PER_HOUR 1000
MAX_CONNECTIONS_PER_HOUR 100;
语法:REVOKE ALLPRIVILEGES, GRANT OPTION FROM user [,...] ;
REVOKE privilege[,…] [( column[,…])]
ON { [ { database|*} . { table|*}] | *}
FROM ‘user’@’host’[,…]
使用GRANT可以撤销应用GRANT语句授予给用户的部分或所有权限。
基于列的权限存储在mysql.columns_priv表中,基于表的权限存储在mysql.tables_priv表中,基于数据库的权限存储在mysql.db表中,基于全局的权限存储在mysql.user表中。
函数 | 说明 |
AES_DECRYPT(string, password) | 解锁加密(AES算法)的字符串,若参数有NULL,则返回NULL |
AES_ENCRYPT(string, password) | 用AES算法加密给定的字符串,若参数有NULL,返回NULL |
DECODE(string, password) | 解密用二进制格式加密的字符串 |
ENCODE(string, password) | 用二进制格式加密字符串 |
MD5(string) | 用MD5加密字符串 |
PASSWORD(string) | 用给定的参数加密密码,结果不能解密 |
SESSION_USER() | 为当前连接返回用户名和主机名,同SYSTEM_USER(),USER() |
CURRENT_USER() | 返回当前连接的用户和主机名的组合(真正的) |
USER() | 返回当前连接用户名和主机名,若输错用户名而以匿名用户连接,USER()会返回输入的用户名和主机名。 |
Ø PASSWORD()函数会对括号内的内容进行加密处理。
Ø user_name@host_name,其中host_name是主机IP地址或主机名,为了能够在本地访问MySQL,使用localhost 或回路地址127.0.0.1,如果使用通配符%作为主机,则允许客户端指定用户从任意主机连接。
Ø 主机指定为127.0.0.1时,会通过TCP/IP协议连接,并且只能在本机访问;
而主机指定为localhost时,localhost不会被解析成IP地址,直接通过UNIXsocket连接。
CREATE USER 、DROP USER、RENAME USER、GRANT、REVOKE、
SHOW GRANTS、SHOWPRIVILEGES、SET PASSWORD、FLUSH;
PASSWORD()、MD5()、CURRENT_USER()、USER()、SYSTEM_USER()、SESSION_USER()。