MySQL之账户管理
MySQL之账户管理
账户管理是MySQL用户管理最基本的内容。包括登录,退出MySQL服务器、创建用户、删除用户、密码管理和权限管理等内容。
其中登录方式非常简单,在这个地址有:http://www.cnblogs.com/kissdodog/p/4154068.html
1、新建普通用户
在MySQL数据库中,建立用户有3种方式:
- 使用create user语句来创建新的用户;
- 直接在mysql.user表中insert 用户;
- 使用grant 语句来新建用户;
(1)、方式一:create user
使用CREATE USER语句创建用户,必须要拥有CREATE USER权限。其格式如下:
CREATE
USER
user[IDENTIFIED BY [PASSWORD]
'password'],
[user[IDENTIFIED BY [PASSWORD]
'password']]...
其中,user参数表示新建用户的账户,user由用户名(User)和主机名(Host)构成;IDENTIFIED BY关键字用来设置用户的密码;password参数表示用户的密码;如果密码是一个普通的字符串,就不需要使用PASSWORD关键字。可以没有初始密码。
示例:
CREATE USER 'admin'@'%' IDENTIFIED BY 'admin'
执行之后user表会增加一行记录,但权限暂时全部为'N'。
(2)、方式二:用INSERT语句新建普通用户
可以使用INSERT语句直接将用户的信息添加到mysql.user表。但必须拥有mysql.user表的INSERT权限。
另外,ssl_cipher、x509_issuer、x509_subject没有值,必须要设置值,否则INSERT语句无法执行。
示例:
INSERT INTO mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) VALUES('%','newuser1',PASSWORD('123456'),'','','')
执行INSERT之后,需要使用一下命令来刷新权限:
FLUSH PRIVILEGES
命令来使用户生效。
(3)、用GRANT语句来新建普通用户
用GRANT来创建新的用户时,能够在创建用户时为用户授权。但需要拥有GRANT权限。
语法如下:
GRANT priv_type ON database.table
TO user[IDENTIFIED BY [PASSWORD] 'password']
[,user [IDENTIFIED BY [PASSWORD] 'password']...]
- priv_type:参数表示新yoghurt的权限;
- databse.table:参数表示新用户的权限范围;
- user:参数新用户的账户,由用户名和主机构成;
- IDENTIFIED BY关键字用来设置密码;
- password:新用户密码;
GRANT语句可以同时创建多个用户。
GRANT SELECT ON *.* TO netUser@'%'
*.*与db.*的区别在于。*.*对所有数据库生效,所以user表的SELECT会变为Y。而db.*user表为'N',更改的是Db表。
2、删除普通用户
(1)、DROP USER语句删除普通用户
需要拥有DROP USER权限。语法如下:
DROP USER user[,user]...
user是需要删除的用户,由用户名(User)和主机名(Host)构成。
DROP USER 'newuser1'@'%'
(2)、DELETE语句删除普通用户
可以使用DELETE语句直接将用户的信息从mysql.user表中删除。但必须拥有对mysql.user表的DELETE权限。
DELETE FROM mysql.user WHERE Host = '%' AND User = 'admin'
删除完成后,一样要FLUSH PRIVILEGES才生效。
3、修改密码
(1)、使用mysqladmin命令来修改root用户的密码
语法:
mysqladmin -u -username -p password "new_password"
新密码(new_password)必须用括号括起来,单引号会报错。
示例:
(注:这个待验证,我怎么执行都不成功!)
(2)、修改user表
UPDATE user表的passwor字段的值,也可以达到修改密码的目的;
UPDATE user SET Password = PASSWORD('123') WHERE USER = 'myuser'
FLUSH PRIVILEGES后生效。
(3)、使用SET语句来修改密码
使用root用户登录到MySQL服务器后,可以使用SET语句来修改密码:
修改自己的密码,不需要用户名
SET PASSWORD = PASSWORD("123");
修改其他用户密码:
SET PASSWORD FOR 'myuser'@'%'=PASSWORD("123456")
FOR 用户名@主机名
(4)、GRANT语句来修改普通用户的密码
使用GRANT语句修改普通用户的密码,必须拥有GRANT权限。
GRANT priv_type ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password']
示例:
GRANT SELECT ON *.* TO 'test3'@'%' IDENTIFIED BY '123'
4、忘记密码的解决方案
如果root用户密码丢失了,会给用户造成很大的麻烦。但是,可以通过某种特殊方法登录到root用户下,然后修改密码。
(1)、使用--skip-grant-tables选项启动MySQL服务
该选项将使MySQL服务器停止权限判断,任何用户都能够访问数据库。
在Windows操作系统下,使用mysqlid或mysqlid-nt来启动MySQL服务。
mysqld命令:
mysqld --skip-grant-tables
mysqld-nt命令:
mysqld-nt --skip-grant-tables
net start mysql命令:
net start mysql --skip-grant-tables
(2)、登录root用户,并且设置新密码
mysql -u root
必须使用UPDATE语句更新mysql数据库下的user表,而不能使用SET语句,因为--skip-grant-tables不能使用SET语句。
修改完密码以后,FLUSH PRIVILEGES语句加载权限表,新密码即生效。