设置数据库(设置数据库密码)
1. 设置数据库密码
md5。
那个pasword为*是可以输出来的,如果要在mysql里面存储密码,可以考虑用字符串类型 char(32) 32位,然后将前台html里面输入的密码用MD5多加密几次(加密一次很容易破解),然后将加密后的密码(32位)插入到数据库中。
如果以后要实现登陆验证功能,可以把用户登陆的密码MD5后再跟数据库比较。
若加密为md5形式的字符串,字段类型用varchar(50)。
验证时也一样把登陆时的明文加密为md5字符串到数据库对比。
2. 设置数据库密码报3d000错误
1、首先,用笔尖把小圆点按下去。初始密码是:000。如果修改过密码,请一定要拨到正确密码后,再进行这项操作。
2、拨动密码键设置要设的密码。一般的密码都是三位的。
3、设置好密码以后,拨动一下开锁按扭,听到“滴”的一声,小圆点弹起来。密码设置成功。注:TSA密码锁不带钥匙。如果密码不正确,请不要进行步骤一的操作。
3. 设置数据库密码能确保web数据库安全
这个是无法在mysql中看到明文的,有些密码加密是可逆的,有不可逆的,可逆的话,要看是什么算法加密,然后解密。在mysql中有:password与md5函数 password用于修改mysql的用户密码,如果是应用与web程序建议使用md5()函数, password函数旧版16位,新版41位,可用select length(password('123456'))察看。 password函数加密不可逆,如果和数据库里加密后内容比较时可以采用password(pwd)==字段内容的方式; md5函数加密后32位,此加密算法不可逆
4. 设置数据库密码永不过期
1、修改普通用户密码
passwd 11
先输入当前密码确认,然后输入新的密码修改
2、修改root用户密码
sudo passwd root 11
默认root用户被禁止登录,如果需要解除限制,修改配置即可
sudo vim /etc/ssh/sshd_config 11
将默认配置注释掉,添加一行新的配置,默认的配置为允许root登录,但是禁止root用密码登录
PermitRootLogin prohibit-password → PermitRootLogin yes 11
sudo service ssh restart 11
二、密码复杂度策略
注意!!!设置复杂度策略之前应该先将当前系统用户的密码修改为符合复杂度策略的密码,如果不符合,设置完复杂度策略之后用户将有不能登录的风险,需要提前合理规划
1、安装cracklib模块
安装PAM的cracklib模块,cracklib能提供额外的密码检查能力
sudo apt-get install libpam-cracklib 11
2、相关策略设置
(1) 禁止使用旧密码
sudo vim /etc/pam.d/common-password 11
找到如下配置,并在后面添加remember=5,表示禁止使用最近用过的5个密码,己使用过的密码会被保存在/etc/security/opasswd
(2)设置最短密码长度
sudo vim /etc/pam.d/common-password 11
找到如下配置,并将默认的minlen=8改为minlen=10,表示最短密码长度需要为10
(3)设置密码复杂度
sudo vim /etc/pam.d/common-password 11
找到如下配置,在后面添加ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1,它表示密码必须至少包含一个大写字母(ucredit),一个小写字母(lcredit),一个数字(dcredit)和一个标点符号(ocredit),具体按照需要修改即可
(4)设置密码过期期限
sudo vim /etc/login.defs 11
找到如下配置,默认为9999天相当于不限制,到期之前7天会提示用户修改密码,按照需求实际修改即可
PASS_MAX_DAYS 180 PASS_MIN_DAYS 0
5. 设置数据库密码命令
1.数据库没有设置密码的话,直接在命令行里输入$ mysql 就可以进入了。
2.或者先设置密码在连mysql$ mysqladmin -u root password "新密码"$mysql -uroot -p新密码
6. 设置数据库密码时,应该选择打开
方法如下:
双击打开OracleXEClient,选择“下一步”,
接受许可协议,选择下一步,修改安装路径(可不修改),点击下一步
等待OracleXEClient安装完成
安装完成后,在安装的根目录下创建network文件夹,然后在network文件夹下创建admin文件夹
在admin文件夹下创建文件tnsnames.ora
用记事本打开tnsnames.ora,添加如下信息,其中包含了数据库连接名,数据库名称,oracle服务器所在ip,以及端口(一般默认端口为1521)
将Toad for Oracle解压到任何一个目录,(此处以D盘根目录为例)
进入Toad for Oracle文件夹,找到toad.exe程序,双击打开
在弹出框中输入连接名,密码,选择oracle客户端,点击connect,进行连接,成功连接
7. 设置数据库密码的注意事项
有以下方法:
方法1: 用SET PASSWORD命令
首先登录MySQL。
格式:mysql> set password for 用户名@localhost = password(‘新密码');
例子:mysql> set password for root@localhost = password(‘123');
方法2:用mysqladmin
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例子:mysqladmin -uroot -p123456 password 123
方法3:用UPDATE直接编辑user表
首先登录MySQL。
mysql> use mysql;
mysql> update user set password=password(‘123') where user='root' and host='localhost';
mysql> flush privileges;
8. 设置数据库密码要用什么方式打开
mysql设置数据库密码常用的有四种方法:
1.用root登陆MySQL终端 mysql>setpassword=password(‘raykaeso‘); mysql>flushprivileges;
2.在MySQL终端中使用GRANT语句 mysql>grantallon*.*to‘root’@’localhost’IDENTIFIEDBY‘raykaeso’withgrantoption; mysql>flushprivileges;
3.在MySQL库user表中直接修改 mysql>usemysql; mysql>updateusersetpassword=password(‘raykaeso’)whereuser=’root'; mysql>flushprivileges; 4、在shell命令行里修改MySQL用户密码 [root@raykaeso?leixuesong]mysqladmin-urootpassword“yourpassword”;
9. 设置数据库密码的作用
人脸识别mysql数据库起数据提供参照作用,实现多项参照,精准解析:
需求描述
1.将人脸特征信息保存进MySQL数据库。
2.调用摄像头识别人脸,将待识别的人物进行识别,并实时地与数据库中的人脸特征信息进行比对,同时判断出被识别者的身份。
需求分析
1、准备
利用opencv、face_recognition、numpy、pymysql等Python第三方类库,官方说法是face_recognition的人脸识别准确率高达99.6%。
2、识别
利用face_recognition,可以很轻易地得到人脸128维的人脸编码,并且通过比对函数,就可以得出想要的结果。
3、编码
由于face_recognition的128维的人脸编码是一个numpy ndarray类型,即矩阵,并不能存进数据库,要想存进数据库,必须进行类型转换
思路:先将矩阵转为列表,再将列表里的每个元素转为字符串,再用字符串拼接的方式拼成一个字符串,这时就可以把特征值存进数据库了。
4.译码
既然是特征值的比对,那么从数据库取完数据之后,就需要把字符串重新转为矩阵格式。
思路:先通过字符串切割,转为列表,再对列表里每个元素转为浮点型(float),最后再转为矩阵。
5.输出
常规做法通过人脸识别后想要在图像上输出被识别者姓名,但是opencv有自己的一套编码规范,无法输出中文,如果保存的是中文,那么就会出现乱码的情况。
中文文字图像显示解决思路:通过调用本地已存在的字体,利用PIL进行格式转换。
解决方案
数据库设计
FaceSQL.py:MySQL数据库处理相关
import pymysql
class FaceSQL:
def __init__(self):
self.conn = pymysql.connect(
# 数据库的IP地址
host="xxx.xxx.xxx.xxx",
# 数据库用户名称
user="******",
# 数据库用户密码
password="******",
# 数据库名称
db="xxx",
# 数据库端口名称
port=3306,
# 数据库的编码方式 注意是utf8
charset="utf8"
)
def processFaceData(self, sqlstr, args=()):
print(sqlstr)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = self.conn.cursor()
try:
# 执行sql语句
cursor.execute(sqlstr, args)
# 提交到数据库执行
self.conn.commit()
except Exception as e:
# 如果发生错误则回滚并打印错误信息
self.conn.rollback()
print(e)
finally:
# 关闭游标
cursor.close()
def saveFaceData(self,id,encoding_str):
self.processFaceData("insert into face(学号,encoding) values(%s,%s)", (id, encoding_str))
def updateFaceData(self, id, encoding_str):
self.processFaceData("update face set encoding = %s where 学号 = %s", (encoding_str, id))
def execute_float_sqlstr(self, sqlstr):
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = self.conn.cursor()
# SQL插入语句
results = []
try:
# 执行sql语句
cursor.execute(sqlstr)
# 获取所有记录列表
results = cursor.fetchall()
except Exception as e:
# 如果发生错误则回滚并打印错误信息
self.conn.rollback()
print(e)
finally:
# 关闭游标
cursor.close()
return results
def sreachFaceData(self, id):
return self.execute_float_sqlstr( "select * from face where 学号="+id)
def allFaceData(self):
return self.execute_float_sqlstr( "select * from face ")
def sreach_Info(self,id):
return self.execute_float_sqlstr( "select * from zstustu where 学号='" + id + "'")
FaceTools.py: 人脸特征信息处理相关
import face_recognition
import numpy
from os import listdir,path
from FaceSQL import FaceSQL
class FaceTools:
def __init__(self):
try:
self.facesql=FaceSQL()
except :
print("数据库连接错误")
def encoding_FaceStr(self, image_face_encoding):
# 将numpy array类型转化为列表
encoding__array_list = image_face_encoding.tolist()
# 将列表里的元素转化为字符串
encoding_str_list = [str(i) for i in encoding__array_list]
# 拼接列表里的字符串
encoding_str = ','.join(encoding_str_list)
return encoding_str
def decoding_FaceStr(self, encoding_str):
# print("name=%s,encoding=%s" % (name, encoding))
# 将字符串转为numpy ndarray类型,即矩阵
# 转换成一个list
dlist = encoding_str.strip(' ').split(',')
# 将list中str转换为float
dfloat = list(map(float, dlist))
face_encoding = numpy.array(dfloat)
return face_encoding
def add_Face(self,image_name, id):
# 加载本地图像文件到一个numpy ndarray类型的对象上
image = face_recognition.load_image_file("./photo/"+image_name)
# 返回图像中每个面的128维人脸编码
# 图像中可能存在多张人脸,取下标为0的人脸编码,表示识别出来的最清晰的人脸
image_face_encoding = face_recognition.face_encodings(image)[0]
encoding_str =self.encoding_FaceStr(image_face_encoding)
# 将人脸特征编码存进数据库
self.facesql.saveFaceData(id,encoding_str)
def updata_Face(self, image_name, id):
# 加载本地图像文件到一个numpy ndarray类型的对象上
image = face_recognition.load_image_file("./photo/"+image_name)
# 返回图像中每个面的128维人脸编码
# 图像中可能存在多张人脸,取下标为0的人脸编码,表示识别出来的最清晰的人脸
image_face_encoding = face_recognition.face_encodings(image)[0]
encoding_str = self.encoding_FaceStr(image_face_encoding)
# 将人脸特征编码更新数据库
self.facesql.updateFaceData(id, encoding_str)
def sreach_Face(self, id):
face_encoding_strs = self.facesql.sreachFaceData(id)
# 人脸特征编码集合
face_encodings = []
# 人脸特征姓名集合
face_names = []
for row in face_encoding_strs:
name = row[0]
face_encoding_str = row[1]
# 将从数据库获取出来的信息追加到集合中
face_encodings.append(self.decoding_FaceStr(face_encoding_str))
face_names.append(name)
return face_names,face_encodings
def load_faceoffile(self):
filepath = 'photo'
filename_list = listdir(filepath)
# 人脸特征编码集合
face_encodings = []
# 人脸特征姓名集合
face_names = []
a = 0
for filename in filename_list: # 依次读入列表中的内容
a += 1
if filename.endswith('jpg'): # 后缀名'jpg'匹对
face_names.append(filename[:-4]) # 把文件名字的后四位.jpg去掉获取人名
file_str = 'photo' + '/' + filename
a_images = face_recognition.load_image_file(file_str)
print(file_str)
a_face_encoding = face_recognition.face_encodings(a_images)[0]
face_encodings.append(a_face_encoding)
print(face_names, a)
return face_names,face_encodings
def load_faceofdatabase(self):
try:
face_encoding_strs = self.facesql.allFaceData()
except:
print("数据库连接错误")
# 人脸特征编码集合
face_encodings = []
# 人脸特征姓名集合
face_names = []
for row in face_encoding_strs:
name = row[0]
face_encoding_str = row[1]
# 将从数据库获取出来的信息追加到集合中
face_encodings.append(self.decoding_FaceStr(face_encoding_str))
face_names.append(name)
return face_names, face_encodings
def load_images_face(self,filepath):
filename_list = listdir(filepath)
for filename in filename_list: # 依次读入列表中的内容
if path.isdir(filepath+filename):
self.load_images_face(filepath+filename+"\\")
if filename.endswith('jpg'): # 后缀名'jpg'匹对
file_str = filepath + filename
a_images = face_recognition.load_image_file(file_str)
print(file_str)
face_encoding = face_recognition.face_encodings(a_images)
if face_encoding != []:
a_face_encoding = face_encoding[0]
encoding_str = self.encoding_FaceStr(a_face_encoding)
self.facesql.saveFaceData(filename[:-4], encoding_str)
def load_images_faces(self, filepath):
filename_list = listdir(filepath)
a=0
for filename in filename_list: # 依次读入列表中的内容
if filename.endswith('jpg'): # 后缀名'jpg'匹对
file_str = filepath + filename
a_images = face_recognition.load_image_file(file_str)
print(file_str)
face_encoding = face_recognition.face_encodings(a_images)
for a_face_encoding in face_encoding:
a += 1
encoding_str = self.encoding_FaceStr(a_face_encoding)
self.facesql.saveFaceData(filename[:-4] + "-" + str(a), encoding_str)
运行结果