本文目錄一覽:
- 1、MySQL數據庫兩張表,一張是身份證號,另一張是四位號和對應的籍貫信息,根據身份證號前四位查詢籍貫信息
- 2、excel連接MySQL數據庫時顯示無法使用提供的憑據進行身份驗證
- 3、Mysql數據庫為什麼要有身份驗證
- 4、java鏈接mysql數據庫實現登陸如何驗證?
MySQL數據庫兩張表,一張是身份證號,另一張是四位號和對應的籍貫信息,根據身份證號前四位查詢籍貫信息
results 表的 IdNumber字段你應該是定義為NOT NULL了, 這種業務用2表關聯更新就可以完成.
excel連接MySQL數據庫時顯示無法使用提供的憑據進行身份驗證
1:數據庫的連接字符串如下:
Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=數據庫名;Data Source=localhost
2:數據庫服務器端用戶屬於administrators組
3:數據庫服務器端的安全性中驗證方式設置為windows方式
Mysql數據庫為什麼要有身份驗證
現象
一線的工程師反映了一個奇怪的現象,剛剛從 MySQL 官網上下載了一個 MySQL 5.7.31。安裝完成後,發現使用任何密碼都能登陸 MySQL,修改密碼也不管用,重新啟動 MySQL 也不能解決。
分析
懷疑使用了 –skip-grant-tables 使用 mysqld –print-defaults 檢查,沒有發現。
檢查登陸用戶,都是 root@localhost,說明和 proxy user 沒有關係。
使用 mysql –print-defaults 檢查客戶端是否設置默認的用戶和密碼,沒有發現。
發現一切都正常,再檢查 plugin 字段,發現只有 root 用戶是 auth_socket ,其它的用戶都是 mysql_native_password,問題可能就出在這兒。
問題解決
對 auth_socket 驗證插件不了解,感覺是這個插件不安全,使用下面的命令修改後,問題解決:
update user set plugin=”mysql_native_password” where user=’root’;
auth_socket 驗證插件的使用場景
問題解決後,又仔細研究了一下 auth_socket 這個插件,發現這種驗證方式有以下特點:
首先,這種驗證方式不要求輸入密碼,即使輸入了密碼也不驗證。這個特點讓很多人覺得很不安全,實際仔細研究一下這種方式,發現還是相當安全的,因為它有另外兩個限制;
只能用 UNIX 的 socket 方式登陸,這就保證了只能本地登陸,用戶在使用這種登陸方式時已經通過了操作系統的安全驗證;
操作系統的用戶和 MySQL 數據庫的用戶名必須一致,例如你要登陸 MySQL 的 root 用戶,必須用操作系統的 root 用戶登陸。
auth_socket 這個插件因為有這些特點,它很適合我們在系統投產前進行安裝調試的時候使用,而且也有相當的安全性,因為系統投產前通常經常同時使用操作系統的 root 用戶和 MySQL 的 root 用戶。當我們在系統投產後,操作系統的 root 用戶和 MySQL 的 root 用戶就不能隨便使用了,這時可以換成其它的驗證方式,可以使用下面的命令進行切換:
ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘test’;
java鏈接mysql數據庫實現登陸如何驗證?
//這是我以前寫的核對數據庫實現登陸的方法,你只看jdbc部分就好,我還特地給你加了點注釋
String sql = “select username,password from account”;
String user = request.getParameter(“user”);
String pass = request.getParameter(“password”);
int j = 0;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JDBCTools1.getConnection();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
//從表中查詢獲取所有賬戶的用戶名密碼的ResultSet 對象
while(rs.next()){
int i = 0;
String username[] = new String[10];//用戶名數組
String password[] = new String[10];//密碼數組
username[i] = rs.getString(1);
password[i] = rs.getString(2);
if(user.equals(username[i])pass.equals(password[i])){//比對
response.getWriter().print(“you are welcome!”);
j++;
}else if(user.equals(username[i])!pass.equals(password[i])){
response.getWriter().println(“the realy password is :”+ username[i] +”,”+password[i]+”\r\n”);
response.getWriter().println(“and you password is :”+user +”,”+pass+” :so the username or password may not right”);
j++;
}else{
continue;
}
i++;
}
if(j == 0){
response.getWriter().println(“Your username may not be properly”);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCTools1.release(rs, ps, conn);
}
//這是我JDBCTools的getConnection方法
getConnection{
String driverClass = oracle.jdbc.driver.OracleDriver;
String jdbcUrl = jdbc:oracle:thin:@localhost:1521:orcl;
//你的數據庫的用戶名密碼
String user = null;
String password = null;
// 通過反射創建Driver對象
Class.forName(driverClass);
return DriverManager.getConnection(jdbcUrl, user, password);}
//這是我JDBCTools的release方法
public static void release(ResultSet rs, Statement statement,
Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/294014.html