一.权限表
1.user表
user表是MySQL中重要的一个权限表,记录允许连接到服务器的账号信息,里面的权限是全局级对的。
2.db表和host表
db表和host表式MySQL数据中非常重要的权限表,db表中存储了用户对某个数据库的操作权限,决定用户能从哪个主机存取哪个数据库。host表中存储了某个主机对数据库的操作权限,配合db权限表对给定主机上的数据库级操作权限做更细致地控制。
3.tables_priv表和columns_priv表
tables_priv表用来对表设置操作权限。
columns_priv表用来对表的某一列设置权限
4.procs_priv表
procs_priv表可以对存储过程和存储函数设置操作权限
二.账号管理
1.登录和退出MySQL服务器
(1)使用root用户登录到本地mysql服务器的test库中
mysql -uroot -p -h location test
备注:-p选项后可以直接跟服务器密码但此方法存在安全隐患,密码可能被窥视。
-h选项指定MySQL服务所在的位置,location表示本机,也可以是具体的IP地址
最后的test则表示登录的MySQL服务器不许要使用“use test”命令直接进入test数据库中
(2) 使用root用户登录到本地mysql服务器的test库中,执行一条查询语句
mysql -uroot -p -h location test -e 'DESC mysql;';
备注:
-e选项:允许你在命令行中输入进入到mysql数据库中要执行的命令,不需要再mysql的交互模式中输入。
DESC:全称“describe”用于显示数据表的结构,包含字段名 (Field
)、数据类型 (Type
)、是否允许为空 (Null
)、键类型 (Key
)、默认值 (Default
) 等。
(3)退出登录
exit
2.新建普通用户
(1)使用CREATE USER语句
使用CREATE USER创建一个用户,用户名是henan,密码是xiaoman,主机名是localhost
create user 'henan'@'location' identified by 'xiaoman';
备注:
create:创建用户,数据库,数据表等;
@前是用户名;@后是指定该用户能在那个主机上登录mysql服务器。
identified by 用于指定该用户的密码。
(2)使用GRANT语句
创建一个新的用户testUser,密码为testpwd。用户 testUser对所有的数据有查询和更新权限,并授于对所有数据表的SELECT和UPDATE权限
grant select,update on *.* to 'testUser'@'location' identified by 'testpwsd';
备注:
grant:授权
on:用于指定权限的范围
*.*:第一个 *
代表所有数据库,第二个 *
代表所有表
to:这部分指定了权限的受益人,即将这些权限授予给哪个用户
3.删除普通用户
(1)使用DROP user语句删除用户
使用DROP USER删除用户'henan'@'localhost'
drop user 'henan'@'localtion';
备注:
drop:DROP
命令是用于永久删除数据库对象的,如数据库、表、视图等
(2)使用DELETE语句删除用户
DELETE FROM mysql.user WHERE host='localhost' and user='henan';
备注:
delete:仅用于数据表中删除一行数据。
4.root用户修改自己的密码
(1)第一次登录MySQL服务器设置密码
SET PASSWORD=password("rootpwd3");
(2)使用UPDATE语句将root用户的密码修改为“rootpwd2”:
UPDATE mysql.user set Password=password("rootpwd2")
WHERE User="root" and Host="localhost";
5.root用户密码丢失的解决办法
(1)找到 MySQL 的配置文件(通常在 /etc/mysql/my.cnf
或者 /etc/my.cnf
),并确保在 [mysqld]
部分添加了 skip-grant-tables
选项。如果没有,请手动添加并保存配置文件。
[client]
socket=/usr/local/mysql/data/mysql.sock
[mysqld]
socket=/usr/local/mysql/data/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
port = 3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
max_connections=2048
character-set-server=utf8
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
#skip-grant-tables
[mysqld_safe]
log-error=/usr/local/mysql/data/error.log
#pid-file=/var/run/mariadb/mariadb.pid
(2)使用root用户登录和重新设置密码
mysql -u root
use mysql
update user set authentication_string=password('新密码') where user='root';
(3)加载权限表
flush privileges;