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 [email protected].%.% |
+---------------------------------------------------------------------------------------------------------------+
| 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 还支持两种复合数据类型 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
三、系统变量