DCL: 用户的管理(CRUD和权限(CRUD)的管理

1)4类SQL语句:
	DDL: 操作数据库和表
	DML: 增删改
	DQL: 查询
	DCL: 管理用户及其授权
	
2)DBA: 数据库管理员

3)管理用户
	(1)添加用户
		DCL创建用户的语法(不要用insert):create user '用户名'@‘主机名’ identified by ‘密码’;
			如: create user 'zhangsan'@‘localhost’ identified by '123’;
	
			create user 'zhangsan'@‘%’ identified by '123’; -- 该用户可以在任意主机上访问
			
		测试登录:
			mysql -uzhangsan -p123
			exit
	
	(2)删除用户
		drop user '用户名'@‘主机名’;
			如: drop user 'zhangsan'@‘localhost’;
	
	(3)修改用户(注意加密,如用password函数)
		需求: 修改lisi用户密码为abc
		
		可以用的写法: update user set password = password('新密码') where name = 'lisi';
		
		DCL的写法: set password for '用户名'@'主机名' = password('新密码');
			如: set password for 'root'@'localhost' = password('123');
			
		在mysql中忘记了root用户的密码?
			1.cmd去执行net stop mysql; -- 停止mysql的服务,需要有管理员的权限(以管理员身份运行)
			2.使用无验证方式启动mysql服务: mysqld --skip-grant-tables  这时光标会卡主
			3.直接另起一个窗口, 输入 mysql 即可 无验证启动mysql,修改密码
				use mysql;
				update user set password = password('root') where user = 'root';
			4.用任务管理器将mysqld.exe这个进程关闭. 关闭2个cmd窗口
			5.再次用管理员运行mysql服务  net start mysql
			6.发现用修改的密码就能进入了
			
	(4)查询用户
		use mysql;
		select * from user;
		
		其中, localhost是本机访问, %是通配符,可以在任意主机使用用户登录数据库
	
4)授权
	(1)查询权限
		show grants for '用户名'@'主机名';
			如: show grants for 'lisi'@'%';
			
			show grants for 'root'@'%'; -- 发现root有所有的权限
	
	(2)授予权限
		grant 权限列表 on 数据库名.表名 TO '用户名'@'主机名';
			如: grant select on db3.account to 'lisi'@'%'; -- 只能看到account表,而且只能查询account表
			
			如: grant select,delete,update on db3.account to 'lisi'@'%'; -- 权限的授予是非常细粒度的
			
			如: 给张三用户授予所有权限(通配符:所有权限  所有数据库的所有表)
				grant all on *.* to 'zhangsan'@'localhost';
			
	
	(3)撤销权限
		revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
			如: 撤销李四的修改权限
				revoke update on db3.account from 'zhangsan'@'localhost';




 

你可能感兴趣的:(【mysql】)