luffy数据库的创建

数据库权限

  • 之前项目操作数据库,都是使用root用户,root用户权限太高了,在公司里,一般不会给你root用户权限
  • 如果开发人员是root权限,数据安全性就很差
  • 开发人员专门创建一个用户,用户只对当前项目的库有操作权限
  • 创建一个luffy库,创建luffy用户,luffy用户只对luffy库有操作权限

创建luffy数据库

# 1.管理员连接数据库
>: mysql -uroot -p

# 2.创建数据库
>: create database luffy default charset=utf8;

# 3.查看用户
>: select user,host,password from mysql.user; 

只有root用户,要创建luffy用户
# 5.7往后的版本(提示: 5.7之后password字段变成了authentication_string字段)
>: select user,host,authentication_string from mysql.user;
"""

创建用户,授予权限

设置权限账号密码
# 授权账号命令:grant 权限(create, update) on 库.表 to '账号'@'host' identified by '密码'

1.配置任意ip都可以连入数据库的账户
grant all privileges on luffy.* to 'user1'@'%' identified by 'Luffy123?';
# 创建一个用户user1,可以通过密码Luffy123?对luffy库的所有表进行访问
# %指允许远程访问

2.由于数据库版本的问题,加%之后可能本地还连接不上,给本地用户单独再配置一条
>: grant all privileges on luffy.* to 'user2'@'localhost' identified by 'Luffy123?';

3.刷新一下权限
>: flush privileges;

"""
只能操作luffy数据库的账户
账号:user1
密码:Luffy123?
"""

提问:mysql 的 localhost 连接与 IP 地址连接有什么区别

项目连接数据库

配置文件配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'luffy',
        'USER': 'user1',
        'PASSWORD': 'Luffy123?',
        'HOST': 'localhost',
        'PORT': 3306
    }
}
import pymysql
pymysql.install_as_MySQLdb()

安装pymysql,或者是mysqlclient

# 运气好:一把装好就用mysqlclient
    pip3 install mysqlclient

# 或者使用pymysql(django版本超过2.0.7,需要改源码)
# 使用pymysql不要忘了在配置文件中加入
    import pymysql
    pymysql.install_as_MySQLdb()

补充:Django 2.x 一些版本pymysql兼容问题

# 项目操作mysql,需要安装模块
    -pymysql
    -mysqlDB
    -mysqlclient

历史:

  • 原来py2上有个操作mysql的模块叫mysqlDB,但是不支持py3,django默认使用这个模块去连接mysql,mysqlDB不支持py3,运行会报错
  • 我们使用pymysql,作为连接mysql的数据库模块,但是需要加代码
imprort pymysql
pymysql.install_as_mysqldb() # 猴子补丁
  • django 2.2.2以后,还使用pymysql,需要改djagno源代码

 

 

  • 每次修改源码会很麻烦, 后期统一使用mysqlclient来作为操作mysql的底层库,它是基于py2的mysqldb,在py3上重写了,但是名字改成了mysqlclient
  • 使用mysqlclient,只需要安装这个模块,不需要再写任何代码,直接用即可 

 问题:如果项目上线后代码泄露,数据库密码很容易泄露,安全性不高,所以,一般我们PASSWORD密码不因该存放到pro.py或者dev.py配置文件中。 因此存放到服务器中, 通过环境变量的获取存放。

通过服务器环境变量来存放/获取密码

 配置文件:

name = os.environ.get('mysql_name','Luffy12333')
password = os.environ.get('mysql_password','Luffy12333')
# 会优先从环境变量中获取用户名和密码,获取不到的话再用这里的,所以这里的用户名和密码可以设置为虚拟的,保证安全性
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'luffy',
        'USER': name,
        'PASSWORD': password,
        'HOST': 'localhost',
        'PORT': 3306
    }
}
  • Windows配置完环境变量需要重启电脑,否则启动项目报错

  • Linux重新加载配置文件即可

# 方式一:
source /etc/profile
# 方式二:
. /etc/profile

 

posted @ 2023-02-27 22:31  莫~慌  阅读(14)  评论(0编辑  收藏  举报