mysql基础之mariadb的安装,连接,用户,密码,权限设置语句详解

Wesley13
• 阅读 944

一、mariadb安装

1、配置mariadb源:

[root@bi7 ~]# 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@bi7 ~]# yum -y install MariaDB

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

[root@bi7 ~]# systemctl restart mariadb

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

[root@bi7 ~]# mysql_secure_installation

运行mysql_secure_installation会执行几个设置:

--为root用户设置密码

--删除匿名账号

--取消root用户远程登录

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

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

5****、客户端程序:

mysql---交互式的client工具

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

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

mysqlimport---数据导入工具

二、启停数据库语句

1、启动服务

[root@bi7 ~]# systemctl start mariadb

2、关闭服务

[root@bi7 ~]# systemctl stop mariadb

3、重启服务

[root@bi7 ~]# systemctl restart mariadb

4、mysql的重启

[root@bi7 ~]# 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 [bi]> select mysql.user.user,host,password from mysql.user;

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

| user | host      | password                                  |

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

| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| bi4 | %         | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |

| root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| root | ::1       | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| bi3 | 127.0.0.1 | *14B20454C89BC49370889C5B1CE9441993ADFB14 |

| bi5 | localhost |                                           |

| bi6 | bi7      |                                           |

| bi7 | bi7      | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |

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

8 rows in set (0.00 sec)

3****、创建用户

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

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

Query OK, 0 rows affected (0.00 sec)

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

Query OK, 0 rows affected (0.00 sec)

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

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

Query OK, 0 rows affected (0.00 sec)

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

MariaDB [bi]> insert into mysql.user(user,host,password) values('bi11','%',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 [bi]> drop user bi3@127.0.0.1;

Query OK, 0 rows affected (0.00 sec)

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

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

Query OK, 1 row affected (0.00 sec)

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

MariaDB [bi]> create user bi10@'%';

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

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

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

5****、重命名用户

格式:biame user OldNAME to NewNAME;

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

五、密码管理语句

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

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

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

[root@bi7 ~]# mysqladmin -ubi7 -p123 password123456

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

MariaDB [(none)]> set password for bi5@'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='bi7';

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)给bi5用户添加查询,创建,更新,删除的权限给test03库的grade表(在任意主机上)

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

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

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

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

      grant all privileges on bi.* to bi5@’192.168.%.%’ identified by ‘123’

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

      grant select on bi.* to bi5@localhost,bi7@localhost;

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

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

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

      grant execute on function bi.test to bi5@’192.168.11.%’;

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

      grant execute on procedure bi.test to bi5@’localhost’;

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

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

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

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

取消ssl连接限制:

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

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

      grant select on bi.* to bi5@’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 bi.* from bi4@'%';

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这