关于mysql创建账户以及权限设置的若干方法和问题

我是在workbench 6.2.3中编写的下面代码。  主要内容是利用存储过程,创建了mysql账户,账户权限设置,删除账户,创建视图等。



use pcloud;
/*查看当前用户*/
SELECT CURRENT_USER();
/*将权限配置表的信息更新到mysql当中*/
flush privileges;

/*TESTE*/
call procDeleteUser("han");

/*这里调用了下面两个存储过程,创建了账户han,密码123,给han访问amis的权限。 程序执行没有问题,但是当我测试的时候,han怎么都登陆不进去,查看user表,一切正常,han,密码都在。每次用workbench连接数据库,用户名是han,不要求密码便可连接,期初以为是自己sql语句出错了。后面select current_user()后发现当前连接用户是“@localhost”,却怎么都没法用han连接。   后面找了很多资料,终于知道原来mysql处理客户端登陆时是先检查hostname,然后username。当han的在本机连接时hostname是首先取localhost,所以我们的用户就成了‘han@loalhost’,它并不匹配‘han@%’但是它匹配于‘ @localhost’。于是每次都无法用han的身份登录。解决方法就是删掉<span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 17.8048000335693px;">anonymous 用户</span>,这样其实对我们的数据库安全也是有好处的。  顺便提一句,mysql检查登录用户时,如果查到多条符合标准的记录,它首优先取第一条记录  */
call procCreateUser("han","123");
call procGrantUser("han","amis");


/*创建相应用户组的视图 */
DELIMITER //
DROP PROCEDURE IF EXISTS `procCreateGroupeUser`//
create procedure procCreateGroupeUser(in _vu varchar(20))
BEGIN
	set @s=concat('create view ', _vu ,' as select * from fichiers');
	PREPARE stmt1 FROM @s;
    EXECUTE stmt1 ;
	DEALLOCATE PREPARE stmt1;
END //;
DELIMITER ; 

call procCreateGroupeUser('amis');

/*创建用户*/
DELIMITER //
DROP PROCEDURE IF EXISTS `procCreateUser`//
create procedure procCreateUser(in _userName varchar(20),in _pass varchar(20))
begin
	set @s=concat("CREATE USER '",_userName,"' @'%' IDENTIFIED BY '",_pass,"'" );
    select @s;
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
end //
DELIMITER ;

DELIMITER //
DROP PROCEDURE IF EXISTS `procGrantUser`//
create procedure procGrantUser(in _userName varchar(20), in _vu varchar(20))
BEGIN
	set @s=concat("GRANT SELECT ON `pcloud`.`",_vu,"` To '",_userName,"'@'%'  WITH GRANT OPTION");
    
    PREPARE stmt1 FROM @s;
    EXECUTE stmt1;
	DEALLOCATE PREPARE stmt1;
END //;
DELIMITER ; 

/*surpprimer un compte*/
DELIMITER //
DROP PROCEDURE IF EXISTS `procDeleteUser`//
create procedure procDeleteUser(in _userName varchar(20))
BEGIN
	set @s=concat("DROP USER '",_userName,"'@'%'");

    PREPARE stmt1 FROM @s;
    EXECUTE stmt1;
	DEALLOCATE PREPARE stmt1;
    
    delete 
    from utilisateur
    where login=_userName;
END //;
DELIMITER ;


/*change password*/
DELIMITER //
DROP PROCEDURE IF EXISTS `procChangePass` //
create procedure procChangePass(in _userName varchar(20), in _newPass varchar(20))
BEGIN    

	update utilisateur 
	set 'password' = password(newPass) 
	where u_id=userName;
    
    set @s=concat("SET PASSWORD FOR '",_userName,"'@'%' = PASSWORD('",_newPass,"'");

    PREPARE stmt1 FROM @s;
    EXECUTE stmt1;
	DEALLOCATE PREPARE stmt1;
END;
DELIMITER ; 


/*activer 1 utilisateur*/
DELIMITER //
DROP PROCEDURE IF EXISTS `procValideUser`//
create procedure procValideUser(in userName varchar(20))
BEGIN
	update utilisateur 
	set actif = 1
	where u_id=userName;
END;
DELIMITER ; 



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值