相关文章推荐
[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@'%';

 
推荐文章