Group 1: 安装Mysql for window or for linux
(1)从Mysql网站下载软件;
http://downloads.mysql.com/archives/installer/(mysql-installer-community-8.0.12.0.msi)
(2)把它安装在你的电脑上;
(3)设置windows环境路径;
(4)启动Mysql服务器。
Group 2:登录Mysql服务器通过以下方法:
(1) HeidiSQL
(2) CMD:Mysql –u username -p
(3)带IP地址的用户创建,然后链接Mysql
解决方案:
https://blog.csdn.net/u010026255/article/details/80062153
Group 3: mysql下创建一个新用户的方法:
例子:创建用户“movie_user” @”*” identified by'123456';
- 用户名@具体的IP地址用户只能在该IP下才能访问
示例代码如下:CREATE USER movie_user @'192.168.23.5' identified BY '123456'
- 用户名@'192.168.1.%'用户只能在该IP段下才能访问(通配符%表示任意)
示例代码如下:CREATE USER USER001 @'192.168.1.%' IDENTIFIED BY 'user001'
用户名@‘%’用户可以在任意IP下访问(默认IP地址为%)
修改密码: set password for '用户名'@'IP地址' = '新密码';
示例代码如下:CREATE USER xfx @'%' IDENTIFIED BY 'xfx666'
自己修改密码:set password = '123';
这里将用户root的密码改为了123
Group 4:grant和revoke
- 查看权限:show grants for 用户 @'IP地址'
刚开始新建的用户xfx,显示的是usage,即没有访问权限。
2、授权:grant 权限 on 数据库.表 to 用户 @'IP地址';
# 表示有所有的权限,除了grant这个命令,这个命令是root才有的。
grant all privileges on db1.t1 to "mjj"@'%';
//all privileges 除grant外的所有权限,
select 仅查权限
select,insert 查和插入权限
...
usage 无访问权限
alter 使用alter table
alter routine 使用alter procedure和drop procedure
create 使用create table
create routine 使用create procedure
create temporary tables 使用create temporary tables
create user
// 使用create user、drop user、rename user和revoke all privileges
create view 使用create view
delete 使用delete
drop 使用drop table
execute 使用call和存储过程
file 使用select into outfile 和 load data infile
grant option 使用grant 和 revoke
index 使用index
insert 使用insert
lock tables 使用lock table
process 使用show full processlist
select 使用select
show databases 使用show databases
show view 使用show view
update 使用update
reload 使用flush
shutdown 使用mysqladmin shutdown(关闭MySQL)
super 使用change master、kill、logs、purge、master和set global。还允许mysqladmin 调试登陆
replication client 服务器位置的访问
replication slave 由复制从属使用
3、revoke:revoke priv_type on database.table from user
这里展示几个示例(超级用户是root,被赋予或撤销权限的对象是xfx或zzp):
(1)授予权限:
GRANT SELECT,UPDATE ON example.emp TO xfx
GRANT DELETE ON example.emp TO xfx
GRANT UPDATE ON example.emp TO xfx
现在,我们来查看xfx拥有的权限
SHOW GRANTS FOR xfx
对用户zzp赋予对emp表的所有权限:
GRANT ALL ON EXAMPLE.emp TO zzp
现在,我们来查看xfx拥有的权限
SHOW GRANTS FOR xfx
(2)撤销权限:
REVOKE SELECT ON example.emp FROM xfx
现在,我们来查看xfx拥有的权限
SHOW GRANTS FOR xfx
Group 5:Role角色
1、创建角色
CREATE ROLE 'app_developer', 'app_read', 'app_write'; --创建了3个角色
2、赋予角色权限
GRANT ALL ON app_db.* TO 'app_developer'; -- 给app_db数据库中所有表的所有权限
GRANT SELECT ON app_db.* TO 'app_read'; -- app_db数据库中所有表的查询权限
GRANT INSERT, UPDATE, DELETE ON app_db.* TO 'app_write'; --app_db数据库中所有表的修改权限
3、赋予账户角色
创建4个用户
CREATE USER 'dev1'@'localhost' IDENTIFIED BY 'dev1pass';
CREATE USER 'read_user1'@'localhost' IDENTIFIED BY 'read_user1pass';
CREATE USER 'read_user2'@'localhost' IDENTIFIED BY 'read_user2pass';
CREATE USER 'rw_user1'@'localhost' IDENTIFIED BY 'rw_user1pass';
赋予角色
GRANT 'app_developer' TO 'dev1'@'localhost';
GRANT 'app_read' TO 'read_user1'@'localhost', 'read_user2'@'localhost';
GRANT 'app_read', 'app_write' TO 'rw_user1'@'localhost';
4、角色激活
查看当前会话已激活的角色
SELECT CURRENT_ROLE();
设置默认激活的角色
-- 为下面4个用户默认激活所有已拥有的角色
SET DEFAULT ROLE ALL TO
'dev1'@'localhost',
'read_user1'@'localhost',
'read_user2'@'localhost',
'rw_user1'@'localhost';
运行时激活:set role app_developer;
Group 6: 综合实验
假设有一个员工管理系统包括以下table: emp, dept
- 设计两个角色:adminrole为admin角色,另一个角色为employeerole一般员工角色,分别赋予它们对两个表和系统的合理访问权限;
GRANT select on example.dept to employeerole
GRANT select on example.emp to employeerole
grant all on example.dept to adminrole WITH GRANT OPTION
grant all on example.emp to adminrole WITH GRANT OPTION
- 让两个角色分别包含至少两个用户(也许需要创建user)
- 先创建用户:
CREATE USER admin001 @'%' IDENTIFIED BY 'admin001'
CREATE USER admin002 @'%' IDENTIFIED BY 'admin002'
CREATE USER employee002 @'%' IDENTIFIED BY 'employee002'
CREATE USER employee001 @'%' IDENTIFIED BY 'employee001'
- 下面赋予相应用户对应的角色:
GRANT employeerole TO employee001
GRANT employeerole TO employee002
GRANT adminrole TO admin001
GRANT adminrole TO admin002
- 验证您的权限设置。
您可能根据角色的合理需求执行以下操作:创建角色、授予角色特权、create用户、授予用户角色、操作数据、验证设置。要求写下整个过程的所有步骤。详细说明该应用程序的安全要求,如何设计角色和用户,如何通过角色管理方法向用户授予相对权限,如何对数据库执行操作,以及如何根据前面的设置验证结果是否正确。
由于前面对admin角色赋予的是对emp、dept表的所有权限而且有with grant option,所以下面验证admin001是否有相应的权限:
①激活admin001的admin角色,这里在root登录的情况下,用set default role all to admin001实现
②用admin001账户登录
③验证select、insert、delete、update、grant、revoke权限是否可用。
下面检验with grant option是否生效:
先用admin001赋予employee001对dept表的update
GRANT update on example.dept TO employee001
再去检验employee001是否有该权限:
下面用账户employee001登录mysql
SET role employeerole; #激活角色employrole
UPDATE EXAMPLE.dept SET deptno=11 WHERE deptno=1;
SELECT * FROM EXAMPLE.dept
显然,employee001拥有了对dept的update权限。
然后,让admin001收回employee001对dept的update权限:
先用admin001登录mysql
用revoke update on example.dept from employee001实现对employee001对dept的update权限的收回
下面在employee001登录状态下使用update命令,观察结果:
显然,heidisql软件会报错,因为employee001对应的update权限已经被admin001撤销
下面,我们检验以下功能是否可以实现!
创建角色、授予角色特权、create用户、授予用户角色
首先是创建角色:
这里我们用admin001和employee001分别进行实验:
①admin001:
CREATE role manager
显然,admin001可以创建角色
②employee001:
CREATE role salesman
显然,employee001没有此权限
然后是授予角色特权:
①admin001:
GRANT SELECT,DELETE,UPDATE,INSERT on example.emp to manager
接下来检验manager是否有这些权限:
先让admin001撤回employee001的employeerole角色
用的是revoke role employeerole from employee001这一SQL语句
然后刷新数据库,并重新登录employee001
此时employee001已经没有角色了
这时,用admin001赋予employee001用户manager角色
GRANT manager TO employee001
接下来用employee001登录,激活角色后,查看拥有的权限
这里只检验employee001是否有对emp表的select权限:
显然,是拥有的
②employee001:
由于employee001不能创建角色,所以也不能给角色赋予特权,这里就不赘述操作步骤
接下来,检验的是创建用户权限:
①admin001:
CREATE USER zzp IDENTIFIED BY 'zzp666'
显然,可以创建
②employee001:
CREATE USER xyy IDENTIFIED BY 'xyy666'
报错,说明employee001不能create user