mysql在使用用户时比较独特,用户的帐号由两部分组成(用户帐号:username@hostname)用户名加上主机名,它的意义是指定哪个用户账号允许通过哪个主机连入mysql服务器。所以@后面的主机名,可以是一个IP,也可以是一个网段,也可以用通配符指定一些主机名等,连放时使用什么样的密码,得使用password指定,

用户帐号管理:

CREATE USER

DROP UESER

RENAME USER

SET PASSWORD


权限管理:

GRANT ALL ON [FUNCTION] *.*


GRANT priv_type [(column_list)]

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

   ON [TABLE|FUNCTION|PROCEDURE] priv_level  #指定FUNCTION后的是【表|函数|过程】

   TO username@hostname [IDENTIFIED BY 'password'], [username@hostname [],...]

   [REQUIRE SSL]

   [WITH with_option ...]


priv_level:权限级别

   *

 | *.*

 | db_name.*

 | db_name.tbl_name

 | tbl_name

 | db_name.routine_name


with_option:

   GRANT OPTION                #把自己的权限转赠给其它用户

 | MAX_QUERIES_PER_HOUR count  #每小时允许执行查询的最多请求次数

 | MAX_UPDATES_PER_HOUR count  #每小时执行最大的更新次数

 | MAX_CONNECTIONS_PER_HOUR count  #每小时执行的最大的连接次数

 | MAX_USER_CONNECTIONS count      #指定使用同一个账号最多能同时连接几次


收回授权:

REVOKE

   priv_type [(column_list)]

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

   ON [object_type] priv_level

   FROM user [, user] ...


REVOKE ALL PRIVILEGES, GRANT OPTION

   FROM user [, user] ...


几个跟用户授权相关的表:

db:               库级别权限;

host:             主机级别权限,已废弃

tables_priv:      表级别权限

colomns_priv:    列级别的权限

procs_priv:      存储过程和存储函数相关的权限

proxies_priv:    代理用户权限


1、创建用户 CREATE USER username@hostname  [IDENTIFIED BY [PASSWORD] 'password' ]

例:我们限定用户名是testuser的用户,只能通过172.16.100.100-172.16.100.199的网段进行访问,密码为testpass

create user testuser@'172.16.100.1__'identified by 'testpass'

2、给户改名:rename user

例:MariaDB [(none)]> rename user 'testuser'@'172.16.%.%' to 'tuser'@'172.16.%.%';

   Query OK, 0 rows affected (0.00 sec)

3、修改密码:set password

例:MariaDB [(none)]> set password for 'tuser'@'172.16.%.%' = password('tpass');

    Query OK, 0 rows affected (0.00 sec)

4、授权用户只能创建某一个表:

例:MariaDB [(none)]> grant create on testdb.tb1 to 'tuser'@'172.16.%.%';

  想获得创建库的权限则:

  MariaDB [(none)]> grant create on testdb.* to 'tuser'@'172.16.%.%';

    Query OK, 0 rows affected (0.00 sec)

5、授权用户有删除数据的权限:

MariaDB [(none)]> grant drop on testdb.* to 'tuser'@'172.16.%.%';

6、授权用户有查看、插入、删除权限:

MariaDB [(none)]> grant insert,select,update,delete on testdb.* to 'tuser'@'172.16.%.%';

7、查看用户具有哪些权限的命令:SHOW GRANTS FOR username@'hostname'

MariaDB [(none)]> show grants for 'tuser'@'172.16.%.%';

+---------------------------------------------------------------------------------------------------------------+

| Grants for tuser@172.16.%.%                                                                                   |

+---------------------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'tuser'@'172.16.%.%' IDENTIFIED BY PASSWORD '*B11C65003C4F734D29ACF16FBE8E5764934807EC' |

| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON `testdb`.* TO 'tuser'@'172.16.%.%'                      |

| GRANT CREATE ON `testdb`.`tb1` TO 'tuser'@'172.16.%.%'                                                        |

+---------------------------------------------------------------------------------------------------------------+


8、权限收回(收回刚才用户的创建表的权限)

MariaDB [(none)]>revoke create on testdb.tb1 from 'tuser'@'172.16.%.%';


9、收回所有的权限:

MariaDB [(none)]>revoke all on testdb.* from 'tuser'@'172.16.%.%';

二、mysql的数据类弄

mysql权限管理+mysql数据类型+系统变量的查看与修改_mysql

mysql权限管理+mysql数据类型+系统变量的查看与修改_用户名_02

mysql权限管理+mysql数据类型+系统变量的查看与修改_通配符_03

复合类型

  MySQL 还支持两种复合数据类型 ENUM 和 SET,它们扩展了 SQL 规范。虽然这些类型在技术上是字符串类型,但是可以被视为不同的数据类型。一个 ENUM 类型只允许从一个集合中取得一个值;而 SET 类型允许从一个集合中取得任意多个值。

ENUM 类型

  ENUM 类型因为只允许在集合中取得一个值,有点类似于单选项。在处理相互排拆的数据时容易让人理解,比如人类的性别。ENUM 类型字段可以从集合中取得一个值或使用 null 值,除此之外的输入将会使 MySQL 在这个字段中插入一个空字符串。另外如果插入值的大小写与集合中值的大小写不匹配,MySQL 会自动使用插入值的大小写转换成与集合中大小写一致的值。

   ENUM 类型在系统内部可以存储为数字,并且从 1 开始用数字做索引。一个 ENUM 类型最多可以包含 65536 个元素,其中一个元素被 MySQL 保留,用来存储错误信息,这个错误值用索引 0 或者一个空字符串表示。

  MySQL 认为 ENUM 类型集合中出现的值是合法输入,除此之外其它任何输入都将失败。这说明通过搜索包含空字符串或对应数字索引为 0 的行就可以很容易地找到错误记录的位置。

SET 类型

  SET 类型与 ENUM 类型相似但不相同。SET 类型可以从预定义的集合中取得任意数量的值。并且与 ENUM 类型相同的是任何试图在 SET 类型字段中插入非预定义的值都会使 MySQL 插入一个空字符串。如果插入一个即有合法的元素又有非法的元素的记录,MySQL 将会保留合法的元素,除去非法的元素。

三、字符属性修饰符

1)CHAR、VARCHAR和TEXT几种字符型常用的属性修饰符:

NOT NULL:                  非空约束

NULL:                      允许为空

DEFAULT 'string':          默认值,不适用于TEXT类型

CHARACTER SET              '字符集'

2)BINARY、VARBINARY和BLOB几种字符型常用的属性修饰符:

NOT NULL

NULL

DEFAULT: 不适用于BLOB

3)整型的常用属性修饰符:

AUTO_INCREMENT:             自动增长

前提:非空,且惟一;支持索引,非负值;

UNSIGNED:                   无符号

NULL                         允许为空

NOT NULL                     非空约束

DEFAULT

三、系统变量

1)MySQL的变量分为以下两种:
    1)系统变量:配置MySQL服务器的运行环境,可以用show variables查看
    2)状态变量:监控MySQL服务器的运行状态,可以用show status查看
系统变量
    系统变量按其作用域的不同可以分为以下两种:
    1)分为全局(GLOBAL)级:对整个MySQL服务器有效
    2)会话(SESSION或LOCAL)级:只影响当前会话
查看系统变量的值
 可以通过show vairables语句查看系统变量的值:
  mysql> show variables like 'log%';  
  mysql> show variables where Variable_name like 'log%' and value='ON';  
注意:show variables优先显示会话级变量的值,如果这个值不存在,则显示全局级变量的值,当然你也可以加上GLOBAL或SESSION关键字区别:
   show global variables;  
   show session/local variables;  
在写一些存储过程时,可能需要引用系统变量的值,可以使用如下方法:
@@GLOBAL.var_name  
@@SESSION.var_name 或  
@@LOCAL.var_name  
最后一种查看变量值的方法是从INFORMATION_SCHEMA数据库里的GLOBAL_VARIABLES和SESSION_VARIABLES表获得。
2)设置和修改系统变量的值
  在MySQL服务器启动时,有以下两种方法设置系统变量的值:
  1)命令行参数,如:mysqld --max_connections=200
   2)选项文件(my.cnf)
在MySQL服务器启动后,如果需要修改系统变量的值,可以通过SET语句:
[plain]
SET GLOBAL var_name = value;  
SET @@GLOBAL.var_name = value;  
SET SESSION var_name = value;  
SET @@SESSION.var_name = value;