88 位表示想打赏此文章

MySQL创建用户、赋权

一、查看数据库用户
二、创建数据库用户
三、修改数据库用户
四、删除数据库用户

五、查看用户权限
六、新增用户赋权
七、删除用户权限
八、刷新权限

一、查看数据库用户

SELECT user,host FROM mysql.user;

二、创建数据库用户

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

username代表登录的用户名;

localhost代表本机登录,不能在另外一台机器上远程登录。如果想远程登录的话,将”localhost”改为”%”,表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录

localhost与127.0.0.1是两种含义,若创建用户时使用localhost,则配置文件也应填写localhost。

三、修改数据库用户

方法一:
SET password for username@localhost = PASSWORD('newpassword'); 
方法二:
UPDATE user SET Password = PASSWORD('newpassword') WHERE user = 'username';
FLUSH PRIVILEGES;

这里只涉及修改密码,若想修改用户ip,则应通过新增用户、重新赋权来操作。
这里第一次接触到FLUSH PRIVILEGES,解释一下:方法二是直接操作表,权限、密码等并不会实时更新,因此需要使用FLUSH PRIVILEGES刷新权限。

四、删除数据库用户

DROP user username@localhost;
DROP user username@'%';

关于引号:实测了一下,对于localhost来说,是否有引号并不影响结果,而’%’则需要引号。

五、查看用户权限

SHOW GRANTS FOR 'username';
SHOW GRANTS FOR 'username'@'localhost';

六、新增用户赋权

GRANT all privileges on database.* to 'username'@'localhost'; 
GRANT select,insert,update,delete,create on database.* to 'username'@'localhost';
GRANT select on db.* to 'username'@'%' IDENTIFIED BY 'password'

all privileges:所有权限;
select:读取权限。
delete:删除权限。
update:更新权限。
create:创建权限。
drop:删除数据库、数据表权限。

dbName.tableName表示授予权限的具体库或表,常用的有以下几种选项:
.:授予该数据库服务器所有数据库的权限。
dbName.*:授予dbName数据库所有表的权限。
dbName.dbTable:授予数据库dbName中dbTable表的权限。

IDENTIFIED BY ‘password’:

grant all privileges on database.* to 'username'@'localhost' IDENTIFIED BY 'password';

七、删除用户权限

REVOKE ALL ON database.table FROM username@localhost;
REVOKE ALL PRIVILEGES ON *.* FROM username@localhost;
REVOKE insert,select,update,delete,drop,create,alter on database.table from username@'%';

revoke跟grant语法差不多,只需要把关键字 “to” 换成 “from” 即可

八、刷新权限

FLUSH PRIVILEGES;

使用insert、update等方式添加用户需要刷新缓存,flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mySQL库(MySQL数据库的内置库)中提取到内存里。MySQL用户数据和权限有修改后,希望在”不重启MySQL服务”的情况下直接生效,那么就需要执行这个命令。

    176 位表示想打赏此文章

数据库表命名规范(摘选)

做过几个项目都是用这一套命名规范的。实际中可能难以完美匹配。理解为主
  • 数据库-表名table命名规范

2.1数据表命名规范

(1)采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线’_’组成,命名简洁明确,多个单词用下划线’_’分隔

(2)全部小写命名,禁止出现大写

(3)禁止使用数据库关键字,如:name,time ,datetime,password等

(4)表名称不应该取得太长(一般不超过三个英文单词)(实际mysql初始的表都4个单词了)

(5)表的名称一般使用名词或者动宾短语

(6)用单数形式表示名称,例如,使用 employee,而不是 employees

  • 数据表-字段column命名规范

续上:

(7)在命名表的列时,不要重复表的名称

例如,在名employe的表中避免使用名为employee_lastname的字段

究竟字段什么时候要加下划线拼凑,什么时候不需要呢?

①需要:这个字段column属于这个表table的、属于这个模块的、与其他功能互斥的,如order_id,bss_code。

如果不加前缀,在中间表时将会出现几个id、id。虽然pk和fk没强制要求命名一致,但肯定看懵的。

②不需要:行业上没歧义的,约定俗成的,如status,creator、modifier、age、sexual。

③不需要:你开发的系统的通用字段,如统一了dict_region中,region为{11,22,33},其他地方就没必要写order_region,person_region。

(8)不要在列的名称中包含数据类型

(9)字段命名使用完整名称,禁止缩写(尽量吧,工科生普遍英文不好,但pid/uid该打)

 

  • tables命名规范

模块_功能点 示例:alllive_log,alllive_category

②功能点 示例:live,message

③通用表 示例:all_user,sys_log,dict_region

  • column命名规范

①名词 示例:user_id,user_name,sex

②动宾短语 示例:is_friend,is_good