MySQL 安全性知识要点

添加、删除用户

1.添加用户

可以使用CREAT USER语法添加一个或多个用户,并设置相应的密码。

语法格式:

CREAT USER user [IDENTIFIED BY  [PASSWORD]  'password']

    [,user [IDENTIFIED BY  [PASSWORD]  'password'] ] ...

其中,user的格式为:

‘user_name’@ 'host name'

注:user_name为用户名,host_name为主机名,password为该用户的密码。

使用自选的IDENTIFIED BY 子句,可以为账户给定一个密码。特别是要在纯文本中指定密码,需忽略PASSWORD关键词。如果不想以明文发送密码,而且知道PASSWORD()函数返回给密码的混编制,则可以指定该混编值,则可以制定该混编值,但要加关键字PASSWORD。

CREAT USER用于创建新的MySQL账户。CREAT USER会在系统本身的mysql数据库的user表中添加一个新记录。要是用CREAT USER,必须拥有mysql数据库的CREAT USER权限或INSERT权限。如果账户已经存在,则出现错误。

 例:添加两个新的用户,king的密码为queen,cong的密码为707013

create user

  'king' @ 'localhost' identified by 'queen',

  'cong' @  'localhost' identified by '707013';

完成后可以切换到mysql数据库,从user表中查到刚刚添加的两个用户记录:

use mysql

show tables;

select * from user

注:在用户名后面声明了关键字localhost。这个关键字指定用户创建的使用MySQL的连接所来自的主机。如果一个用户名和主机名中包含特殊符号如“_”,或通配符如“%”,则需要用单引号将其括起。“%”表示一组主机。

如果两个用户具有相同的用户名但主机不同,MySQL将其视为不同的用户,允许为这两个用户分配不同的权限集合。

如果没输入密码,那么MySQL允许相关的用户不使用密码登录。但是从安全的角度并不推荐这种做法。

2.删除用户

 语法格式:

DROP USER  user [, user_name]......

DROP USER  语句用于删除一个或多个MySQL账户,并取消其权限。要使用DROP USER ,必须拥有mysql数据库的全局CREATE USER权限或DELETE权限。

例:删除用户 palo

drop user Palo@localhost;

删除后可以用上面介绍的方法查看一下效果。如果被删的用户已经创建了表,索引或其他数据库对象,它们将继续保留,因为MySQL并没有记录是由谁创建了这些对象。

修改用户名、密码

1.修改用户名

可以使用RENAME USER语句来修改一个已经存在的SQL用户的名字。

语法格式:

RENANE USER old_user TO new_user,

       [, old_user TO new_user]...

注:old_user为已经存在过的SQL用户,new_user为新的SQL用户。

RENAME USER语句用于对原有MySQL账户进行重新命名。要使用RENAME USER,必须拥有全局CREATE USER权限或mysql数据库UPDATE权限。如果旧账户不存在或者新账户已经存在,则会出现错误。

例:将用户king的名字修改为ken

rename user

  ‘king’ @ ‘loacalhost’ to 'ken' @ ‘loacalhost’;

完成后可以用上面的方法查看一下是否修改成功。

2.修改密码

要修改某个用户的登录密码,可以使用SET PASSWORD语句。

语法格式:

SET PASSWORD  [FOR user]=PASSWORD ('newpassword')

注:如果不加FOR user,表示修改当前用户的密码。加了FOR user则是修改当前主机上的特定用户的密码,user为用户名,它的值必须以'user_name' @'host_name'的格式给定。

例:将用户ken的密码改为qen

set password for ‘ken’ @ ‘localhost’ =password(‘qen’);

权限控制

1.授予权限

新的SQL用户不允许访问其他SQL用户的表,也不能立即创建自己的表,它必须被授权。可以被授予的权限有以下几组。

(1)列权限:和表中的一个具体列相关。

(2)表权限:和一个具体表中的数据有关。

(3)数据库权限:和一个具体的数据库中的所有表相关。

(4)用户权限:和MySQL所有的数据库相关。

给某用户授予权限可以使用GRANT语句。使用SHOW GRANTS语句可以查看当前账户拥有什么权限。

GRANT 语法格式:

GRANT priv_type  [(column_list)]  [, priv_type  [(column_list)] ]...

  ON [obect_type] {tbl_name |  *  |   * . *  |  db_name.*}

  TO user [IDENTIFIED BY [PASSWORD]  'password' ]

     [,user [IDENTIFIED BY [PASSWORD]  'password' ]  ]...

  [WITH with_option [with_option] ...]

其中,object_type:

TABLE

|  FUNCTION

|  PROCEDURE

with_option:

GRANT  OPTION

|   MAX_QUERIES_PRE_HOUR  count

|   MAX_UPDATES_PRE_HOUR  count

|   MAX_CONNECTIONS_PRE_HOUR  count

|   MAX_USER_CONNECTIONS  count

注: priv_type为权限的名称,如 SELECT,UPDATE等,给不同的对象授予权限 priv_type的值也不同。TO子句用来设定用户的密码。ON字关键字后面给出的是要授予权限的数据库或表名。

SELECT:给予用户使用SELECT语句访问特定的表的权力。用户也可以在一个视图公式中包含表。然而,用户必须对视图公式中的每个表或视图都有SELECT权限。

INSERT:给予用户使用INSERT语句向一个特定表中添加行的权力。

DELETE:给予用户使用DELETE语句向一个特定表中删除行的权力。

UPDATE:给予用户使用UPDATE语句修改特定表中值的权力。

REFERENCES:给予用户使用创建一个外键来参照特定的表的权力。

CREATE:给予用户使用特定名字创建一个表的权力。

ALTER:给予用户使用ALTER TABLE语句修改表的权力。

INDEX:给予用户使用在表上定义索引的权力。

DROP:给予用户删除表的权力。

ALL或ALL PRIVILEGES:表示所有权限名。

在授予表权限时,ON关键字后面跟上tb1_name ,tb1_name为表名或视图名。

 

posted @ 2017-12-11 19:12  来自魔仙堡的计算机小白  阅读(332)  评论(0编辑  收藏  举报