MySQL库中的表及其作用
user表
User表是MySQL中最重要的一个权限表,记录允许连接到服务器的帐号信息,里面的权限是全局级的。
db表和host表
db表和host表是MySQL数据中非常重要的权限表。db表中存储了用户对某个数据库的操作权限,决定用户能从哪个主机存取哪个数据库。host表中存储了某个主机对数据库的操作权限,配合db权限表对给定主机上数据库级操作权限做更细致地控制。
table_priv表和columns_priv表
tables_priv表是用来对表设置操作权限。
columns_prive表用来对表的某一列设置权限。
procs_priv表
procs_priv表可以对存储过程中存储函数设置操作权限
账户管理
登录和退出MySQL服务器
MySQL命令常见的参数以及登录和退出MySQL服务器的方法
使用root用户登录到本地mysql服务器的test库中
mysql -u root -ppwd123 -h localhost test
使用root用户登录到本地mysql服务器的test库中,执行一条查询语句
mysql -u root -p -h localhost test -e "DESC person;"
新建普通用户
使用create user或grant语句
例如:创建一个用户名为:zhangsan,密码是pwd123,主机名是localhost的用户。
create user 'zhangsan'@'localhost' identified by 'pwd123';
使用GRANT语句创建一个新的用户testUser,密码为testpwd。用户 testUser对所有的数据有查询和更新权限,并授于对所有数据表的SELECT和UPDATE权限
GRANT SELECT,UPDATE ON *.* TO 'testUser'@'localhost' IDENTIFIED BY 'testpwd'; /*创建账户并授予权限*/
SELECT Host,User,Select_priv,Update_priv, FROM mysql.user where user='testUser'; /*查看账户权限信息*/
删除普通用户
使用drop user语句
使用drop删除用户'zhangsan'
drop user 'zhangsan'@'localhost';
使用delete命令删除用户
delete from mysql.user where user='zhangsan' and host='localhost';
密码的修改
root用户修改自己的密码
1)mysqladmin -u root -p password "123456"
2)使用update命令,修改user表中的密码。
例:update user set password=password('root123') where user='root';
3)使用SET语句修改root用户的密码
SET PASSWORD=password("rootpwd3");
root用户修改普通用户密码
1、使用SET语句将testUser用户的密码修改为"newpwd"
SET PASSWORD FOR 'testUser'@'localhost'=password("newpwd");
2、使用UPDATE语句修改普通用户的密码
使用UPDATE语句将testUser用户的密码修改为"newpwd2":
UPDATE mysql.user set Password=PASSWORD("newpwd2")
WHERE User="testUser" and Host="localhost";
3)使用GRANT语句修改普通用户密码
【例13.13】使用GRANT语句将testUser用户的密码修改为"newpwd3":
GRANT USAGE ON *.* TO 'testUser'@'localhost' IDENTIFIED BY 'newpwd3';
普通用户修改密码
3)使用GRANT语句修改普通用户密码
普通用户登录MySQL服务器后,通过SET语句设置自己的密码。
SET PASSWORD = PASSWORD('newpassword');
root用户密码丢失的解决办法
(1)使用--skip-grant-tables选项启动MySQL服务
mysql start-mysqld --skip-grant-tables
(2)使用root用户登录和重新设置密码
mysql -u root
update mysql.user set password=password('mypass') where user='root' and host='localhost';
(3)加载权限表
flush privileges;
或者修改/etc/my.cnf配置文件,在里面添加skip-grant-tables
然后重复上面的方式,免密登录MySQL中,进行密码的修改。
权限管理
1:MySQL的各种权限
账户权限信息被存储在mysql数据库的user、db、host、tables_priv、columns_priv和procs_priv表中。在MySQL启动时,服务器将这些数据库表内容读入内存。
2:授权
授权就是为某个用户授于权限。合理的授权可以保证数据库的安全。MySQL中可以使用GRANT语句为用户授于权限。
使用GRANT语句创建一个新的用户grantUser,密码为"grantpwd"。用户grantUser对所有的数据有查询、插入权限,并授于GRANT权限。GRANT语句及其执行结果如下:
MySQL> GRANT SELECT,INSERT ON *.* TO 'grantUser'@'localhost' IDENTIFIED BY 'grantpwd' WITH GRANT OPTION;
Query OK, 0 rows affected (0.03 sec)
结果显示执行成功,使用SELECT语句查询用户testUser2的权限:
MySQL> SELECT Host,User,Select_priv,Insert_priv, Grant_priv FROM mysql.user where user='grantUser';
3.回收权限
收回权限就是取消已经赋于用户的某些权限。收回用户不必要的权限可以在一定程度上保证系统的安全性。MySQL中使用REVOKE语句取消用户的某些权限。
使用REVOKE语句取消用户testUser的更新权限。REVOKE语句及其执行结果如下:
MySQL> REVOKE UPDATE ON *.* FROM 'testUser'@'localhost';
Query OK, 0 rows affected (0.00 sec)
执行结果显示执行成功,使用SELECT语句查询用户test的权限:
MySQL> SELECT Host,User,Select_priv,Update_priv,Grant_priv FROM MySQL.user where user='testUser';
4:查看权限
SHOW GRANTS语句可以显示指定用户的权限信息,使用SHOW GRANT语句查看账户信息。
SHOW GRANTS FOR 'user'@'host' ;
使用SHOW GRANTS语句查询用户testUser的权限信息。SHOW GRANTS语句及其执行结果如下:
MySQL> SHOW GRANTS FOR 'testUser'@'localhost';