用户管理
元数据数据库:mysql
系统授权表:
db, host, user
columns_priv, tables_priv, procs_priv, proxies_priv
用户账号:
‘USERNAME’@‘HOST’
@‘HOST’:主机名,IP地址或Network
通配符: % _
示例:192.168.%.%
创建用户
CREATE USER ‘USERNAME’@‘HOST’ [IDENTIFIED BY ‘password’];
默认权限:USAGE
用户重命名
RENAME USER old_user_name TO new_user_name;
删除用户
DROP USER ‘USERNAME’@'HOST‘
示例:删除默认的空用户
DROP USER ‘’@‘localhost’;
修改密码
8.0版本:
ALTER USER “root”@“localhost” IDENTIFIED BY “test”;
如果你没有修改认证方式,8.0版本默认的密码加密方式是:caching_sha2_password,而现在很多客户端工具还不支持这种加密方式
连接时候就会报错:client does not support authentication protocol requested by server; consider upgrading MySQL client
解决方法
1.加上 WITH mysql_native_password
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘test’;
2.在配置文件中指定默认认证方式
[mysqld]
default_authentication_plugin=mysql_native_password
5.5版本:
SET PASSWORD FOR ‘user’@‘host’ = PASSWORD(‘password’);
UPDATE mysql.user SET password=PASSWORD(‘password’)
WHERE clause;
此方法需要执行下面指令才能生效:
FLUSH PRIVILEGES;
#mysqladmin -u root -poldpass password ‘newpass’
忘记管理员密码的解决办法:
1.关闭mysqld进程
2.添加选项选项:
skip-grant-tables
skip-networking
3.使用UPDATE命令修改管理员密码
4.关闭mysqld进程,移除上述两个选项,重启mysqld
权限管理
权限类别:
管理类
程序类
数据库级别
表级别
字段级别
管理类:
CREATE TEMPORARY TABLES
CREATE USER
FILE
SUPER
SHOW DATABASES
RELOAD
SHUTDOWN
REPLICATION SLAVE
REPLICATION CLIENT
LOCK TABLES
PROCESS
程序类:
FUNCTION
PROCEDURE
TRIGGER
CREATE
ALTER
DROP
EXCUTE
库和表级别:
DATABASE
TABLE
ALTER
CREATE
CREATE VIEW
DROP
INDEX
SHOW VIEW
GRANT OPTION:能将自己获得的权限转赠给其他用户
数据操作:
SELECT
INSERT
DELETE
UPDATE
字段级别:
SELECT(col1,col2,…)
UPDATE(col1,col2,…)
INSERT(col1,col2,…)
所有权限:
ALL PRIVILEGES 或 ALL
授权
GRANT priv_type [(column_list)],… ON [object_type] priv_level TO ‘user’@‘host’
[WITH GRANT OPTION];
priv_type: 权限,简单粗暴填ALL就有全部权限
object_type:作用对象,比如表
priv_level: (所有库) | . | db_name. | db_name.tbl_name | tbl_name(当前库的表) | db_name.routine_name(指定库的函数,存储过程,触发器)
with_option: GRANT OPTION
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
示例:
GRANT SELECT (col1), INSERT (col1,col2) ON test.aat TO'tuser'@'localhost'
授权tuser@'localhost'用户在test库中的aat表权限
可查询col1列的数据,插入col1和col2字段的数据
回收授权
REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] … ON
[object_type] priv_level FROM user [, user] …
示例:
REVOKE DELETE ON test.* FROM tuser@'localhost';
删掉delete权限
查看指定用户获得的授权
Help SHOW GRANTS
SHOW GRANTS FOR ‘user’@‘host’;
SHOW GRANTS FOR CURRENT_USER[()];
进程启动时会读取mysql库中所有授权表至内存
(1) GRANT或REVOKE等执行权限操作会保存于系统表中,服务进程通常会自动重读授权表,使之生效
(2) 对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表:FLUSH PRIVILEGES;