mysql基础之mariadb的安装,连接,用户,密码,权限设置语句详解
阅读原文时间:2022年04月22日阅读:1

一、mariadb安装

1、配置mariadb源:

[root@ren7 ~]# vim /etc/yum.repos.d/mariadb.repo

[mariadb]
name = MariaDB
baseurl = http://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64/
gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

2、yum安装(下载时该大写的必须大写):

[root@ren7 ~]# yum -y install MariaDB

3、安装完成后需要重启mariadb:

[root@ren7 ~]# systemctl restart mariadb

4、初始化数据库(安全配置向导):

[root@ren7 ~]# mysql_secure_installation

运行mysql_secure_installation会执行几个设置:

--为root用户设置密码

--删除匿名账号

--取消root用户远程登录

--删除test库和对test库的访问权限

--刷新授权表使修改生效

5、客户端程序:

mysql---交互式的client工具

mysqldump---备份工具,基于mysql协议向mysqld服务发起查询请求,并将查询的所有数据转换成insert等写操作语句保存在文件当中

mysqladmin---基于mysql协议管理mysqld

mysqlimport---数据导入工具

二、启停数据库语句

1、启动服务

[root@ren7 ~]# systemctl start mariadb

2、关闭服务

[root@ren7 ~]# systemctl stop mariadb

3、重启服务

[root@ren7 ~]# systemctl restart mariadb

4、mysql的重启

[root@ren7 ~]# systemctl restart mysqld

三、连接数据库语句

1、mysql -u root -p

表示使用root用户(mysql的root用户,非系统root用户)连接到mysql数据库,-u表示指定用户,-u和root用户名之间的空格可以省略,-p表示将会提示输入密码

2、mysql -u root -p123

表示使用root用户连接数据库,并且直接以明文的方式指定密码,123为密码,-p与密码之间不能有空格

3、mysql -u root -D mysql -p 123

表示在连接mysql数据库时,可以直接指定将要登录的具体的数据库,使用-D指定数据库名称

4、mysql -u root -p -S /var/lib/mysql/mysql.sock

在本地连接到mysql数据库时,可以指定通过哪个套接字文件连接到数据库,通过-S指定套接字位置

5、mysql -u root -p -h 192.168.1.103 -P 3306

在连接到mysql数据库时,可以指定要连接到远程的哪一台主机的mysql上,也可以指定端口,-h指定mysql主机,-P大写,指定mysql服务对应的端口,连接的前提是已经授权当前客户端的IP地址能够连接到数据库

6、mysql -u root -p123123 -e 'use mysql; select user,host,password from user;'

连接数据库的同时执行对应命令,并且返回命令对应的结果,并不会进入mysql提示符

7、退出连接:

exit或者quit(\q)或者Ctrl+D

连接数据库的常用选项:

--host=host_name, -h host_name:服务端地址;

--user=user_name, -u user_name:用户名;

--password[=password], -p[password]:密码

--port=port_num, -P port_num:服务端端口;

--socket=path, -S path:套接字位置;

--database=db_name, -D db_name:要进入的数据库名称;

--compress, -C:数据压缩传输;

--execute=statement, -e statement:非交互模式执行SQL语句;

--vertical, -E:查询结果纵向显示;

--protocol={TCP|SOCKET|PIPE|MEMORY}

四、用户管理语句

1、mysql的用户账号格式:username@host

上述格式表示username对应的用户能够通过哪个host登录mysql

host:此mysql用户能够通过哪些客户端主机IP登录当前服务器上的mysql服务,对于mysql来说,host可以为主机名,也可以为IP地址,但是,mysql认为主机名和IP地址属于不同的主机;

支持通配符,常用得通配符:

_: 表示任意单个字符

%: 表示任意长度的任意字符

例子:

root@’192.168.%.%’

2、查询用户

查看当前用户:select user();

MariaDB [ren]> select mysql.user.user,host,password from mysql.user;

+------+-----------+-------------------------------------------+

| user | host      | password                                  |

+------+-----------+-------------------------------------------+

| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| ren4 | %         | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |

| root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| root | ::1       | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| ren3 | 127.0.0.1 | *14B20454C89BC49370889C5B1CE9441993ADFB14 |

| ren5 | localhost |                                           |

| ren6 | ren7      |                                           |

| ren7 | ren7      | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |

+------+-----------+-------------------------------------------+

8 rows in set (0.00 sec)

3、创建用户

方法一:使用create user命令创建用户

MariaDB [mysql]> create user 'ren6'@'%';

Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> create user 'ren7'@'localhost' identified by '123';

Query OK, 0 rows affected (0.00 sec)

方法二:在授权数据库的同时,如果对应的用户不存在,那么mysql将会自动创建对应的用户

MariaDB [ren]> grant all on ren.* to ren10@'%' identified by 'ren10';

Query OK, 0 rows affected (0.00 sec)

方法三:直接在mysql库的user表中插入一条记录,这种方法使用较少,且在设置了严格的sql-mode以后就无法使用

MariaDB [ren]> insert into mysql.user(user,host,password) values('ren11','%',password('123'));

ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value

当前数据库的sql-mode设置了严格检查(如RADITIONAL)

4、删除用户

通常使用drop命令删除用户,也可以直接删除mysql.user表中对应用户的记录;drop删除的更加彻底。

方法一:使用drop user命令删除对应用户(用户及用户对应的权限都将被删除)

MariaDB [ren]> drop user ren3@127.0.0.1;

Query OK, 0 rows affected (0.00 sec)

方法二:使用delete语句删除mysql.user表中的用户对应的记录,但是使用此方法会有相关信息残留

MariaDB [ren]> delete from mysql.user where user='ren10' and host='%';

Query OK, 1 row affected (0.00 sec)

但是,如果某些数据库的权限已经授权给了“ren10@’%’”用户,那么,在mysql.db表中,“ren10@’%’”用户对应的权限将不会被删除,当管理员想要再次创建“ren10@’%’”用户时,则会出现出问题,如果管理员想要使用create user命令再次创建同名用户时,可能会出现如下错误:

MariaDB [ren]> create user ren10@'%';

ERROR 1396 (HY000): Operation CREATE USER failed for 'ren10'@'%'

解决方案一:删除mysql.db表中原“ren10@’%’”用户残留的权限数据后,使用flush privileges命令刷新,然后再次使用create user命令创建新的“ren10@’%’”用户(也就是将原“ren10@’%’”用户的残留数据删除干净,相当于drop)

解决方案二:使用grant命令授权“ren10@’%’”用户能够访问任意数据库即可,如果授权用户的数据库与原来残留的权限所对应的数据库不是同一个库,残留的权限就会被新的创建的“ren10@’%’”用户所获得;因为新用户和旧用户名称相同,所以新的“ren10@’%’”用户会继承被删除同名用户的权限。

5、重命名用户

格式:rename user OldNAME to NewNAME;

重命名后的用户密码以及权限不会发生改变,只有用户名会发生改变。

五、密码管理语句

修改或设置mysql用户的密码有以下几种方法:

方法一:管理员在系统命令行中使用mysqladmin命令设置mysql用户的密码。

语法格式:mysqladmin -u用户名 -p旧密码 password

[root@ren7 ~]# mysqladmin -uren7 -p123 password123456

方法二:set password for '用户名'@'IP地址' = Password('新密码')

MariaDB [(none)]> set password for ren5@'localhost'=password('123123');

Query OK, 0 rows affected (0.00 sec)

方法三:修改mysql.user表中对应用户的password字段

命令格式:update mysql.user set password=password(‘PASSWORD’) where user=’USERNAME’

示例:

MariaDB [(none)]> update mysql.user set password=password('111111') where user='ren7';

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0

注意:有的版本中的password替换为了authentication_string

六、权限管理

1、授权命令

语法格式:

GRANT ALL [PRIVILEGES] ON db.tbl TO 'username'@'host' IDENTIFIED BY 'password';

其中,db表示数据库名字,可以使用*通配符,tbl为表的名称,可以使用*通配符。

(1)给ren5用户添加查询,创建,更新,删除的权限给test03库的grade表(在任意主机上)

grant select,create,update,delete on test03.grade to ren5@'%';

(2)给ren5赋予test03数据库的grade表最高权限(在任意主机上)

grant all privileges on test03.grade to ren5@'%';

(3)给ren5赋予ren数据库的所有权限,在192.168.0.0网段中(只允许ren5用户通过该网段的地址链接ren数据库)

grant all privileges on ren.* to ren5@’192.168.%.%’ identified by ‘123’

(4)将同样的权限同时授权给多个用户

grant select on ren.* to ren5@localhost,ren7@localhost;

(5)只对某张表的某个字段授权

grant select (name,age) on ren5@localhost;

(6)如果ren数据库中有一张表的名称为test,同时,ren数据库中有一个函数也叫test,那么可以通过function关键字只授权给用户test函数,而不将表的权限授予用户

grant execute on function ren.test to ren5@’192.168.11.%’;

(7)可以使用procedure关键字,指明被操作的对象是存储过程

grant execute on procedure ren.test to ren5@’localhost’;

(8)使用function关键字和procedure关键字可以对函数或者存储过程授权,使用view关键字可以对视图进行授权

(9)当一个用户被创建时,mysql会自动授予其usage权限。usage权限只能用于登录数据库,不能执行其他操作

(10)如果用户有可能会跨越不安全的网络连接到数据库,可以强制用户使用ssl建立会话,命令如下:

grant usage on *.* to ‘ren5’@’192.168.11.11’ require ssl;

取消ssl连接限制:

grant usage on *.* to ‘ren5’@’192.168.11.11’ require none;

(11)如果在授权ren5用户时,搭配了grant选项,则ren5用户有权将已拥有的权限授予给其他用户(一般不会使用)

grant select on ren.* to ren5@’192.168.%.%’ with grant option;

(12)管理员可以通过选项对用户进行一些限制

max_queries_per_hour     #限制用户每小时执行的查询语句数量;

max_updates_per_hour    #限制用户每小时执行的更新语句的数量;

max_connections_per_hour    #限制用户每小时连接数据库的次数;

max_user_connections     #限制用户使用当前账号同时连接服务器的连接数量;

使用flush privileges命令刷新

2、查看授权

查看授权可以从两方面查看:1、从用户的角度查看授权,查看权限表示查看对应用户都能操作哪些数据库;2、从数据库的角度查看权限表示指定数据库都对哪些用户开放了哪些权限

(1)从用户的角度查看授权的语句

语法格式:

show grants for 用户名;

(2)从数据库的角度查看授权:

语法格式:

select * from mysql.db where Db="你要查看的数据库"

(3)查看自己的权限

show grants;

3、删除授权

删除授权/撤销授权的常用语句:

revoke "要移除的权限" on 数据库.表 from 用户@host;

例子:

MariaDB [mysql]> revoke all on ren.* from ren4@'%';