0115 用户管理
Posted nzmzmc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0115 用户管理相关的知识,希望对你有一定的参考价值。
1.关机、重启命令
shutdown -h now 立刻进行挂机(h=halt 停止)
shutdown -h 1 1分钟后关机(默认)
shutdown -r now 重启
halt 关机
reboot 立刻重启
sync 把内存数据同步到磁盘
注意细节:
1.不管是重启还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中
2.目前的shutdown/reboot/halt等命令均已经再关机前进行了sync(建议运行)
演示部分命令:
2.用户登录和注销
登录时尽量少用root账户登录,因为系统管理员有最大权限,要避免操作失误。
可以利用普通用户登录,登陆后再用‘su-用户名’的命令(su-root)来切换成系统管理员身份
在提示符下输入logout即可注销用户
注意细节:
1.logout注销指令在图形运行级别无效,在运行级别3下有效
演示:
执行logout,退回tom账户
再次执行logout,注销
3.用户管理
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须先向系统管理员申请一个账户,然后以这个账户的身份进入系统
1.添加用户
基本语法
useradd 用户名
当创建用户成功后,会自动创建和用户同名的家目录
也可以通过 useradd -d 指定目录 用户名,给创建的用户指定家目录
演示:添加一个用户jack,默认该用户的家目录在/home/jack
2.指定/修改密码
基本语法
passwd 用户名
演示:给jack指定密码
3.删除用户
基本语法
userdel 用户名
有两种情况:
1.删除用户,但保留家目录
2.删除用户及用户的主目录 userdel -r 用户名
一般情况下建议保留家目录
演示1:jack家目录保留
演示2:删除king及主目录
4.查询用户信息指令
基本语法
id 用户名
演示
5.切换用户
基本语法
su - 切换的用户名
从权限高的用户切换到权限低的用户,无需输入密码
当需要返回原来用户名时,使用exit/logout指令
6.查看当前登录用户
基本语法
whoami/who am I
切换到tom时,仍显示root用户
7. 用户组
用户组类似于角色,系统可以对有共性的多个用户进行统一的管理
新增组:
groupadd 组名
删除组:
groupdel 组名
增加用户时直接加上组:
useradd -g 用户组 用户名
若没有指定组,则自动创建和用户名相同的组
修改组:
usermod -g 用户组 用户名
演示:
增加删除组
增加用户直接加上组
修改组
8.用户和组相关文件
/etc/passwd
用户的配置文件,记录用户各种信息
每行含义:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
/etc/shadow
口令的配置文件
每行含义:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group
组的配置文件
每行含义:
组名:口令:组标识号:组内用户列表
MySQL的用户管理与权限管理
MySQL的用户管理与权限管理
用户管理与权限管理
当对数据库进行用户或者权限管理完成后,需要刷新数据库权限:flush privileges;
用户管理
创建MySQL用户
-
注意:MySQL中不能单纯通过用户名来说明用户,必须要加上主机。如jack@10.1.1.1
-
用户的信息保持在MySQL数据库中的
mysql.user数据表
中 -
创建用户时,host字段可以分为本地主机和远程主机(即可以创建两个用户名相同的账号,但是host字段不一样)
基本语法:
命令格式:
创建MySQL用户:
# create user '用户名'@'被允许连接的主机名称或主机的IP地址(host)' identified by '用户密码';
hoost说明:
loaclhost:与127.0.0.1 一样代表只允许本机连接MySQL数据库
主机名称:如果在本机的 /etc/hosts 文件上写入了对应的IP和主机名,就可以指定主机名允许主机远程连接数据库
主机IP:允许被远程连接数据库的主机的IP
验证是否创建成功:
# select user,host from mysql.user;
字段说明:
user字段:存放账户
host字段:查看允许连接的主机
演示:
MySQL服务器操作:
查看user表原始数据:
# mysql > select user,host from mysql.user;
+---------------+-----------+
| user | host | => user默认存在三个账号,host字段说明只能在本机使用(禁止远程连接)
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
创建本地用户,不设密码:
# mysql > create user 'jack'@'localhost';
或 => 在本机MySQL数据库中创建一个jack用户
# mysql > create user 'jack'@'127.0.0.1';
创建本地用户并设置密码:
# mysql> create user 'tom'@'localhost' identified by '123';
或 => 在本机MySQL数据库中创建一个tom用户并设置其密码为456
# mysql> create user 'tom'@'127.0.0.1' identified by '123';
创建远程连接的用户,权限给某个主机:(需要指定远程主机IP,假设远程主机IP:10.1.1.21)
# mysql > create user 'harry'@'10.1.1.21' identified by '456'; => 10.1.1.31
创建远程连接的用户,权限给整个网络:(给10.1.1.0/24)
# mysql > create user 'pete'@'10.1.1.%' identified by '789'; => 10.1.1.%
创建远程连接的用户,权限给所有主机:(any)
# mysql > create user 'root'@'%' identified by '000'; => %
=> 需要注意的是,这个root的权限只是普通用户的权限
验证是否创建成功:
# mysql > select user,host from mysql.user;
+----------------+-----------+
| user | host |
+----------------+-----------+
| root | % | => 所有主机都可以访问
| pete | 10.1.1.% | => 给整个10.1.1.0/24 整个网络
| harry | 10.1.1.21 | => 允许10.1.1.21 主机远程访问
| jack | localhost | => 无密码
| mysql.session | localhost | => 只能本地访问
| mysql.sys | localhost |
| root | localhost |
| tom | localhost |
+----------------+-----------+
10.1.1.21主机远程连接服务器:MySQL服务器IP:10.1.1.31
测试harry账号:
# mysql -h 10.1.1.31 -P 3307 -uharry -p456
测试root账号:
# mysql -h 10.1.1.31 -P 3307 -uroot -p000
备注:如果测试不成功,在MySQL服务端刷新一下权限,可能是更新不成功
删除MySQL用户
- 如果在删除用户时没有指定主机的名称或主机的IP地址,则默认删除这个账号的所有信息。
- 注意:如果删除了本地root管理员账号,需要重新初始化数据库
基本语法:
命令格式:
第一种:drop
# drop user '用户名'@'主机名称或主机的IP地址';
第二种:delete
# delete from mysql.user where user='用户名' and host='主机名或主机IP'
MySQL演示:
# mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| root | % |
| pete | 10.1.1.% |
| harry | 10.1.1.21 |
| jack | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| tom | localhost |
+---------------+-----------+
第一种方式删除用户:drop (删除root、pete、tom用户)
# mysl > drop user 'root'@'%';
# mysql > drop user 'pete'@'10.1.1.%';
# mysql > drop user 'tom'@'localhost';
第二种方式删除:delete (删除harry、jack)
# mysql > delete from mysql.user where user='harry' and host='10.1.1.21';
# mysql > delete from mysql.user where user='jack' and host='localhost';
查看是否删除成功:
# mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
修改MySQL用户
重命名MySQL用户:
- 重命名用户的名称(即修改user字段)
- 重命名被允许访问的主机名称或主机的IP地址(即修改host字段)
基本语法:
命令格式:
第一种方法:rename
# rename user 旧用户信息 to 新用户信息;
第二种方法:update
# update mysql.user set user='新用户名',host='新主机名/IP' where user='旧用户名';
演示:
创建测试用户:
创建一个hxd用户:
# mysql > create user 'tom'@'10.1.1.%' identified by '123';
查看user表:
# mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| hxd | % |
+---------------+-----------+
修改用户:
# mysql > rename user 'tom'@'10.1.1.%' to 'hxd'@'%'; => 一起修改或者单独修改一个都可以
# mysql > update mysql.user set user='jack',host='localhost' where user='hxd'; => 一起修改或者单独修改一个都可以
用户权限管理
权限说明
所有权限说明https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html
权限 | 描述 |
---|---|
USAGE | 无权限,只有登录数据库,只可以使用test或test_*数据库 |
ALL | 所有权限 |
create、delete、update、select | 增删改查权限 |
with grant option
选项说明:
选项表示允许把自己的权限授予其它用户或者从其他用户收回自己的权限
默认情况下,分配权限时如果没有指定with grant option,代表这个用户不能下发权限给其他用户,但是这个权限分配不能超过自身权限。
权限保存位置:
数据表 | 描述 |
---|---|
mysql.user | 所有mysql用户的账号和密码,以及用户对全库全表权限(.) |
mysql.db | 非mysql库的授权都保存在此(db.*) |
mysql.table_priv | 某库某表的授权(db.table) |
mysql.columns_priv | 某库某表某列的授权(db.table.col1) |
mysql.procs_priv | 某库存储过程的授权 |
给用户授权:grant
权限表示方法:
*.* | 代表所有数据库的所有数据表 |
---|---|
db_name.* | 代表某数据库下的所有数据表 |
db_name.tb_name | 代表某数据库下的某个数据表 |
基本语法:
命令格式:
# grant 权限1[,权限2] on 库.表 to 用户@主机 [with grant option];
# grant 权限(列1,列2,...) on 库.表 to 用户@主机 [with grant option];
选项说明:
with grant option:代表此账号可以为其他用户下发权限,但是下发的权限不能超过自身权限。
演示:
针对数据库db_run分配权限:(查询权限)
# mysql > grant select on db_run.* to 'tom'@'10.1.1.%'; => 给tom用户分配数据库db_run 的查询权限
# mysql > flush privileges; => 权限分配后记得刷新一下
远程测试一下:
# mysql -h 10.1.1.31 -P 3307 -utom -p123
# mysql > show databases;
+--------------------+
| Database | => 只有查询权限,tom执行其他权限是不被允许的
+--------------------+
| information_schema |
| db_run |
+--------------------+
备注:"select" 可以通过逗号多给几个权限,如:"create、delete、update、select"
"db_run.*" 还可以修改为"db_run.tb_run1.*",代表是这个数据库的某个表的查询权限
针对某数据表中的某一列分配权限: update(name)
# mysql > grant update(name) on db_run.tb_run1 to 'jack'@'10.1.1.%'; => jack 只有修改name字段的权限,一般还要给查询权限
远程机演示:
MySQL [db_run]> select*from tb_run1;
ERROR 1142 (42000): SELECT command denied to user 'jack'@'10.1.1.21' for table 'tb_run1'
# mysql > grant select on db_run.tb_run1 to 'jack'@'10.1.1.%'; => 给查询权限
针对某账号分配所有权限:ALL
# mysql > grant all on *.* to 'jack'@'localhost';
# mysql > flush privileges;
查询用户权限
基本语法:
命令格式:
查询当前用户权限:
# show grants;
查询其他用户权限:
# show grants for '用户名称'@'授权的主机名或IP';
演示:
# mysql> show grants for 'tom'@'10.1.1.%';
+------------------------------------------------------------------+
| Grants for tom@10.1.1.% |
+------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'tom'@'10.1.1.%' |
| GRANT SELECT ON `db_run`.* TO 'tom'@'10.1.1.%' WITH GRANT OPTION |
+------------------------------------------------------------------+
# mysql> show grants for 'jack'@'10.1.1.%';
+------------------------------------------------------------------------+
| Grants for jack@10.1.1.% |
+------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jack'@'10.1.1.%' |
| GRANT SELECT, UPDATE (name) ON `db_run`.`tb_run1` TO 'jack'@'10.1.1.%' |
+------------------------------------------------------------------------+
# mysql> show grants for 'jack'@'localhost';
+---------------------------------------------------+
| Grants for jack@localhost |
+---------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'jack'@'localhost' |
+---------------------------------------------------+
使用grant 创建用户(集创建和授权一体)
- 注意:此方法,5.7以后不推荐,未来会被弃用!
基本语法:
# grant 权限 on 数据库.数据表 to '新用户名称'@'授权主机名称或IP地址' identified by '用户的密码' [with grant option];
演示:
创建一个admin用户,主机位%,密码123,授予所有权权限,并且拥有下发权限:
# mysql > grant all on *.* to 'admin'@'%' identified by '123' with grant option;
查看amdin用户权限:
# mysql> show grants for 'admin'@'%';
+--------------------------------------------------------------+
| Grants for admin@% |
+--------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION |
+--------------------------------------------------------------+
revoke 回收权限
- 假设给某账号分配权限过高,可以通过
revoke
命令回收该账号的权限 - 回收权限是,库.表要与授权的相同
基本语法:
命令格式:
# revoke 权限 on 库.表 from '用户'@'主机';
演示:
查看jack用户权限:
# mysql> show grants for 'jack'@'10.1.1.%';
+------------------------------------------------------------------------+
| Grants for jack@10.1.1.% |
+------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jack'@'10.1.1.%' |
| GRANT SELECT ON `db_run`.`tb_run1` TO 'jack'@'10.1.1.%' |
| GRANT SELECT, UPDATE (name) ON `db_run`.`tb_run1` TO 'jack'@'10.1.1.%' |
+------------------------------------------------------------------------+
回收jack用户的update(name)权限:
# mysql> revoke update(name) on db_run.tb_run1 from 'jack'@'10.1.1.%';
查看回收情况:
# mysql> show grants for 'jack'@'10.1.1.%';
+---------------------------------------------------------+
| Grants for jack@10.1.1.% |
+---------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jack'@'10.1.1.%' |
| GRANT SELECT ON `db_run`.`tb_run1` TO 'jack'@'10.1.1.%' |
+---------------------------------------------------------+
再回收jack用户的select权限:
# mysql> revoke select on db_run.tb_run1 from 'jack'@'10.1.1.%';
查看回收情况:
# mysql> show grants for 'jack'@'10.1.1.%';
+-----------------------------------------+
| Grants for jack@10.1运维工作中经常用到的一些知识总结