當前位置:首頁 » 數據倉庫 » 資料庫用戶認證實驗
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫用戶認證實驗

發布時間: 2023-05-13 08:31:25

① 用資料庫怎樣驗證賬號和密碼

你要首先連庫,要確定連上了!然後再用sql語句選擇,就可以了,你要先選擇用戶
分別用兩個變數來保存選擇的結果

select name
from user
where user.username='textFiled1.text'
這個驗證這個賬戶存不存在
然後用戶存在的時候再驗證密碼:
既然樓主可以做出界面的話,相信樓主可以寫好這個代碼咯,樓主加油吧

② 用JAVA編寫一個用戶登陸界面,用戶驗證通過資料庫實現

這是我以前寫的系統登錄框的login
package java1;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.Rectangle;
import java.awt.Font;

public class login extends JFrame
{
public login() {
try {
jbInit();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args)
{
login frm=new login();
frm.setBounds(300,200,300,260);
frm.setVisible(true);

}

private void jbInit() throws Exception {
this.getContentPane().setLayout(null);
jLabel1.setForeground(Color.red);
jLabel1.setText("用戶名");
jLabel1.setBounds(new Rectangle(25, 72, 68, 29));
jButton2.setBounds(new Rectangle(142, 159, 81, 30));
jButton2.setText("取消");
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton2_actionPerformed(e);
}
});
jButton1.setBounds(new Rectangle(38, 159, 81, 29));
jButton1.setText("確定");
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
jTextField1.setBounds(new Rectangle(109, 79, 136, 23));
jPasswordField1.setBounds(new Rectangle(109, 115, 136, 23));
this.getContentPane().add(jLabel1);
jLabel3.setFont(new java.awt.Font("隸書", Font.PLAIN, 24));
jLabel3.setText("學 生 考 試 系 統");
jLabel3.setBounds(new Rectangle(22, 15, 268, 47));
this.getContentPane().add(jTextField1);
this.getContentPane().add(jLabel2);
this.getContentPane().add(jButton2);
this.getContentPane().add(jButton1);
this.getContentPane().add(jLabel3);
this.getContentPane().add(jPasswordField1);
jLabel2.setForeground(Color.red);
jLabel2.setText("密碼");
jLabel2.setBounds(new Rectangle(26, 112, 68, 29));
}

JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JTextField jTextField1 = new JTextField();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JLabel jLabel3 = new JLabel();
JPasswordField jPasswordField1 = new JPasswordField();
main2 wo=new main2();
int sum;

//判斷許可權的方法
public void success()
{
try{
ResultSet rs1;
String s1="select * from 管理許可權 where name='"+jTextField1.getText()+"' and password='"+jPasswordField1.getText()+"'";
rs1=sqlcx.Rs_jiluji(s1);
rs1.first();
sum=Integer.parseInt((String)(rs1.getString(3)));
System.out.println(sum);
very();
}
catch(Exception c){System.out.println("success error");}
}

//根據許可權設置窗口
public void very()
{
if (sum==1)
{JOptionPane.showOptionDialog(this, "您現在是以教師許可權登陸", "登陸信息"
, JOptionPane.DEFAULT_OPTION,
JOptionPane.ERROR_MESSAGE,
null, null, null);

}
else
{
JOptionPane.showOptionDialog(this, "你現在是以學生許可權登陸", "登陸信息"
, JOptionPane.DEFAULT_OPTION,
JOptionPane.ERROR_MESSAGE,
null, null, null);
wo.jButton2.setVisible(false);
wo.jButton3.setVisible(false);
wo.jButton4.setVisible(false);
wo.jButton5.setVisible(false);
wo.jButton6.setVisible(false);
wo.jButton7.setVisible(false);
wo.jButton8.setVisible(false);
wo.jMenu2.setVisible(false);
wo.jMenu3.setVisible(false);
wo.jMenu4.setVisible(false);
}

}

public void jButton1_actionPerformed(ActionEvent e)
{
//判斷用戶名是否為空
if (jTextField1.getText().length() == 0) {
JOptionPane.showOptionDialog(this, "用戶名不能為空", "錯誤信息"
, JOptionPane.DEFAULT_OPTION,
JOptionPane.ERROR_MESSAGE,
null, null, null);
}
//判斷密碼是否為空
else if (jPasswordField1.getText().length()==0)
{
JOptionPane.showOptionDialog(this,"密碼不能為空", "錯誤信息"
, JOptionPane.DEFAULT_OPTION,
JOptionPane.ERROR_MESSAGE,
null, null, null);
}
else
{
try
{
ResultSet rs;//聲明記錄集
String sql="select * from 管理許可權 where name='"+jTextField1.getText()+"'";
rs = sqlcx.Rs_jiluji(sql);
if (rs.next())
{
if(jPasswordField1.getText().equals(rs.getString(2)))
{

success();
wo.setBounds(60,40,700,600);
wo.setVisible(true);
this.dispose();
}
else
{
JOptionPane.showOptionDialog(this,"密碼錯誤", "錯誤信息"
, JOptionPane.DEFAULT_OPTION,
JOptionPane.ERROR_MESSAGE,
null, null, null);
}
}
else
{
JOptionPane.showOptionDialog(this,"沒有所要找的用戶名", "錯誤信息"
, JOptionPane.DEFAULT_OPTION,
JOptionPane.ERROR_MESSAGE,
null, null, null);
}

}
catch(Exception c){
JOptionPane.showOptionDialog(this,"連接資料庫失敗", "錯誤信息"
, JOptionPane.DEFAULT_OPTION,
JOptionPane.ERROR_MESSAGE,
null, null, null);
}
}
}
public void jButton2_actionPerformed(ActionEvent e) {
System.exit(0);
}
}

③ Oracle操作系統認證方式

Oracle操作系統認證方式

在Oracle資料庫系統中,用戶如果要以特權用戶身份(INTERNAL/SYSDBA/SYSOPER)登錄Oracle資料庫可以有兩種身份驗證的方法: 即使用與操作系統集成的身份驗證或使用Oracle資料庫的密碼文件進行身份驗證。因此,管理好密碼文件,對於控制授權用戶從遠端或本機登錄Oracle資料庫系統,執行資料庫管理工作,具有重要的意義。 Oracle資料庫的密碼文件存放有超級用戶INTERNAL/SYS的口令及其他特權用戶的用戶名/口令,它一般存放在ORACLE_HOMEDATABASE目錄下。

一、 密碼文件的創建:

在使用Oracle Instance Manager創建一資料庫實例的時侯,在ORACLE_HOMEDATABASE目錄下還自動創建了一個與之對應的密碼文件,文件名為PWDSID.ORA,其中SID代表相應的Oracle資料庫系統標識符。此密碼文件是進行初始資料庫管理工作的基礎。在此之後,管理員也可以根 據需要,使用工具ORAPWD.EXE手工創建密碼文件,命令格式如下: C: >ORAPWDFILE=< FILENAME >PASSWORD =< PASSWORD >ENTRIES=< MAX_USERS >

各命令參數的含義為:

FILENAME:密碼文件名;

PASSWORD:設置INTERNAL/SYS帳號的口令;

MAX_USERS:密碼文件中可以存放的最大用戶數,對應於允許以SYSDBA/SYSOPER許可權登錄資料庫的最大用戶數。由於在以後的維護中,若 用戶數超出了此限制,則需要重建密碼文件,所以此參數可以根據需要設置得大一些。有了密碼文件之後,需要設置初始化參數REMOTE_LOGIN_PASSWORDFILE來控制密碼文件的使用狀態。

二、 設置初始化參數REMOTE_LOGIN_PASSWORDFILE:

在Oracle資料庫實例的初始化參數文件中,此參數控制著密碼文件的使用及其狀態。它可以有以下幾個選項: NONE:指示Oracle系統不使用密碼文件,特權用戶的登錄通過操作系統進行身份驗證; EXCLUSIVE:指示只有一個資料庫實例可以使用此密碼文件。只有在此設置下的密碼文件可以包含有除INTERNAL/SYS以外的用戶信息,即允許將系統許可權SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用戶。 SHARED:指示可有多個資料庫實例可以使用此密碼文件。在此設置下只有INTERNAL/SYS帳號能被密碼文件識別,即使文件中存有其他用戶的信息,也不允許他們以SYSOPER/SYSDBA的許可權登錄。此設置為預設值。在REMOTE_LOGIN_PASSWORDFILE參數設置為EXCLUSIVE、SHARED情況下,Oracle系統搜索密碼文件的次序為: 在系統注冊庫中查找ORA_SID_PWFILE參數值(它為密碼文件的全路徑名); 若未找到,則查找ORA_PWFILE參數值;若仍未找到,則使用預設值ORACLE_HOMEDATABASEPWDSID.ORA;其中的SID代表相應的Oracle資料庫系統標識符。

三、 向密碼文件中增加、刪除用戶:

當初始化參數REMOTE_LOGIN_PASSWORDFILE設置為EXCLUSIVE時,系統允許除INTERNAL/SYS以外的其他用戶以管理員身份從遠端或本機登錄 到Oracle資料庫系統,執行資料庫管理工作;這些用戶名必須存在於密碼文件中,系統才能識別他們。由於不管是在創建資料庫實例時自動創建的密碼文件,還是使用工具ORAPWD.EXE手工創建的密碼文件,都只包含INTERNAL/SYS用戶的信息;為此,在實際操作中,可能需要向密碼文 件添加或刪除其他用戶帳號。

由於僅被授予SYSOPER/SYSDBA系統許可權的用戶才存在於密碼文件中,所以當向某一用戶授予或收回SYSOPER/SYSDBA系統許可權時,他們的 帳號也將相應地被加入到密碼文件或從密碼文件中刪除。由此,向密碼文件中增加或刪除某一用戶,實際上也就是對某一用戶授予或收回 SYSOPER/SYSDBA系統許可權。

要進行此項授權操作,需使用SYSDBA許可權(或INTERNAL帳號)連入資料庫,且初始化參數REMOTE_LOGIN_PASSWORDFILE的設置必須為 EXCLUSIVE。具體操作步驟如下:創建相應的密碼文件; 設置初始化參數REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE; 使用SYSDBA許可權登錄: CONNECTSYS/internal_user_passswordASSYSDBA; 啟動資料庫實例並打開資料庫; 創建相應用戶帳號,對其授權(包括SYSOPER和SYSDBA): 授予許可權:GRANTSYSDBATOuser_name; 收回許可權:REVOKESYSDBAFROMuser_name;現在這些用戶可以以管理員身份登錄資料庫系統了;

四、 使用密碼文件登錄:

有了密碼文件後,用戶就可以使用密碼文件以SYSOPER/SYSDBA許可權登錄Oracle資料庫實例了,注意初始化參數 REMOTE_LOGIN_PASSWORDFILE應設置為EXCLUSIVE或SHARED。任何用戶以SYSOPER/SYSDBA的許可權登錄後,將位於SYS用戶的Schema之下,以下為 兩個登錄的例子:

1. 以管理員身份登錄:

假設用戶scott已被授予SYSDBA許可權,則他可以使用以下命令登錄:

CONNECTscott/tigerASSYSDBA

2. 以INTERNAL身份登錄:

CONNECTINTERNAL/INTERNAL_PASSWORD

五、 密碼文件的維護:

1. 查看密碼文件中的成員:

可以通過查詢視圖V$PWFILE_USERS來獲取擁有SYSOPER/SYSDBA系統許可權的用戶的信息,表中SYSOPER/SYSDBA列的取值TRUE/FALSE表示此用戶是否擁有相應的許可權。這些用戶也就是相應地存在於密碼文件中的成員。

2. 擴展密碼文件的用戶數量:

當向密碼文件添加的帳號數目超過創建密碼文件時所定的限制(即ORAPWD.EXE工具的MAX_USERS參數)時,為擴展密碼文件的用戶數限制,需重建密碼文件,具體步驟如下: a) 查詢視圖V$PWFILE_USERS,記錄下擁有SYSOPER/SYSDBA系統許可權的'用戶信息; b) 關閉資料庫; c) 刪除密碼文件; d) 用ORAPWD.EXE新建一密碼文件; e) 將步驟a中獲取的用戶添加到密碼文件中。

3. 修改密碼文件的狀態:

密碼文件的狀態信息存放於此文件中,當它被創建時,它的預設狀態為SHARED。可以通過改變初始化參數REMOTE_LOGIN_PASSWORDFILE的設置改變密碼文件的狀態。當啟動資料庫事例時,Oracle系統從初始化參數文件中讀取REMOTE_LOGIN_PASSWORDFILE參數的設置;當載入資料庫 時,系統將此參數與口令文件的狀態進行比較,如果不同,則更新密碼文件的狀態。若計劃允許從多台客戶機上啟動資料庫實例,由於各客戶機上必須有初始化參數文件,所以應確保各客戶機上的初始化參數文件的一致性,以避免意外地改變了密碼文件的狀態,造成資料庫登陸的失 敗。

4. 修改密碼文件的存儲位置:

密碼文件的存放位置可以根據需要進行移動,但作此修改後,應相應修改系統注冊庫有關指向密碼文件存放位置的參數或環境變數的設置

5. 刪除密碼文件:

在刪除密碼文件前,應確保當前運行的各資料庫實例的初始化參數REMOTE_LOGIN_PASSWORDFILE皆設置為NONE。在刪除密碼文件後,若想要以管理員身份連入資料庫的話,則必須使用操作系統驗證的方法進行登錄。

;

④ 通過資料庫來驗證登錄用戶,怎麼實現驗證怎麼讀取數據

接受登陸用戶的用戶名和密碼暫存,然後查詢資料庫是否有滿足這兩個值的用戶,有就驗證成功,否則驗證失敗。讀取數據就是一條select語句到資料庫查詢,不會連這個也要給你列出來吧!