已有管理员权限的用户登录mysql,我这里使用root用户,最高权限。
1、查看用户
select User,Host from mysql.user;
2、新增用户
create user xqk identified by '123456';
或直接使用
grant select,insert on *.* to xqk@localhost identified by '123456';
上面第一条命令创建了用户xqk,密码是123456,默认mysql.user表Host值为“%”,允许除本机之外的任何一台机器远程登录
第二条命令添加用户的同时赋予增删改查权限,并且只允许本地登录。
在user表里可以查看到新增用户的信息:
MariaDB [(none)]> select User,Host from mysql.user;
+--------+-----------+
| User | Host |
+--------+-----------+
| xqk | % |
| root | localhost |
+--------+-----------+
7 rows in set (0.00 sec)
3、用户授权
查看新创建用户权限(无任何权限)
MariaDB [(none)]> show grants for 'xqk';
+----------------------------------------------------------------------------------------------------+
| Grants for xqk@% |
+----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'xqk'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
+----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
查看数据库
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| zabbix |
+--------------------+
5 rows in set (0.00 sec)
授权方式:
MySQL权限如下表
权限名字 | 权限说明 | Context |
---|---|---|
CREATE | 允许创建新的数据库和表 | Databases, tables, or indexes |
DROP | 允许删除现有数据库、表和视图 | Databases, tables, or views |
GRANT OPTION | 能够把自己获得的权限转赠给其他用户一个副本 | Databases, tables, or stored routines |
LOCK TABLES | 允许使用显式锁表的语句锁表,前提是你必须有SELECT权限 | Databases |
REFERENCES | MySQL 5.7.6之前引用特权是未使用的。5.7.6,创建一个外键约束需要引用父表的特权。 | Databases or tables |
EVENT | The EVENT privilege is required to create, alter, drop, or see events for the Event Scheduler. | Databases |
ALTER | 允许修改权限或重命名表 | Tables |
DELETE | 允许从表中或数据库中删除行 | Tables |
INDEX | 允许创建或删除索引 | Tables |
INSERT | 允许在表和数据库中插入行 | Tables or columns |
SELECT | 允许在表和数据库这查询行 | Tables or columns |
UPDATE | 允许在表和数据空中更新行 | Tables or columns |
CREATE TEMPORARY TABLES | 允许创建和使用临时表 | Tables |
TRIGGER | 允许使用触发器相关,前提是你必须拥有这个表的CREATE、DROP、EXECUTE或者Display权限 | Tables |
CREATE VIEW | 允许使用CREATE VIEW语句 | Views |
SHOW VIEW | 允许使用SHOW VIEW语句 | Views |
ALTER ROUTINE | ALTER ROUTINE允许你修改存储过程(过程或函数)前提是你需要在存储过程上拥有ALTER或DROP权限 | Stored routines |
CREATE ROUTINE | ALTER ROUTINE允许你创建存储过程(过程或函数)前提是你需要在存储过程上拥有ALTER或DROP权限 | Stored routines |
EXECUTE | 允许你执行存储过程(过程或函数) | Stored routines |
FILE | 文件读写权限允许你文件在服务器主机上使用LOAD DATA INFILE and SELECT 语句以及LOAD DATA()函数 | File access on server host |
CREATE TABLESPACE | 允许创建表空间,前提是你需要CREATE、ALTER OR DROP tablespaces 以及属于log file 组 | Server administration |
CREATE USER | 允许使用ALTER USER, CREATE USER, DROP USER, RENAME USER, and REVOKE ALL PRIVILEGES 语句 | Server administration |
PROCESS | 允许使用SHOW PROCESSLIST or mysqladmin processlist看到线程属于其他账户,你总能看到自己的线程。PROCESS权限还允许使用SHOW ENGINE语句 | Server administration |
PROXY | Server administration | |
RELOAD | 允许使用FLUSH语句,以及mysqladmin命令中对于FLUSH的操作例如:flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, and reload. | Server administration |
REPLICATION CLIENT | 是否有权限去请求复制相关主数据库产生的事件的,允许显示的使用SHOW MASTER STATUS, SHOW SLAVE STATUS, and SHOW BINARY LOGS语句 | Server administration |
REPLICATION SLAVE | 是否能够创建连接以复制的方式,连接至数据库服务器端 | Server administration |
SHOW DATABASES | 允许使用SHOW DATABASES来查看所有数据库列表,如果没有这个权限则只能查看规定数据库 | Server administration |
SHUTDOWN | 允许使用SHUTDOWN语句,mysqladmin shutdown命令,以及mysql_shutdown()API函数 | Server administration |
SUPER | 超级特权可以用于终止其他会话或改变服务器运行。属于特别高级别的一类权限 | Server administration |
USAGE | 无权限,当您想要创建一个没有权限的用户时,可以指定USAGE | Server administration |
ALL PRIVILEGES | 所有权限: ALL PRIVILEGES,可以简写为ALL | Server administration |
grant 权限名字(多个权限用","号隔开)
on 数据库名.表名
to '用户名'@'允许登录的ip地址'
[IDENTIFIED BY '密码'
];
数据库名.表名
表示授予权限的具体库或表,常用的有以下几种选项:
- .:授予该数据库服务器所有数据库的权限。
- dbName.*:授予dbName数据库所有表的权限。
- dbName.dbTable:授予数据库dbName中dbTable表的权限。
用户名'@'允许登录的ip地址'
,表示授予的用户以及允许该用户登录的IP地址。其中Host有以下几种类型:
- localhost:只允许该用户在本地登录,不能远程登录。
- %:允许在除本机之外的任何一台机器远程登录。
- 192.168.1.3:具体的IP表示只允许该用户从特定IP登录。
eg:给xqk用户授予对test库添加和查询权限,并且允许远程连接数据库,命令如下:
MariaDB [(none)]> grant insert,select on test.* to 'xqk'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
查看xqk用户所获得的权限
MariaDB [(none)]> show grants for 'xqk'@'%';
+----------------------------------------------------------------------------------------------------+
| Grants for xqk@% |
+----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'xqk'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT SELECT, INSERT ON `test`.* TO 'xqk'@'%' |
+----------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
4、删除用户
MariaDB [(none)]> delete from mysql.user where User='username' and Host='localhost';
Query OK, 1 row affected (0.00 sec)