1. 程式人生 > 資料庫 >資料庫安全結課實驗過程

資料庫安全結課實驗過程

資料庫安全要結課啦。老師要我們實現一篇核心期刊的演算法。。。
雖然我很菜,但是!不做會掛科的。。。既然所有人都要做,我覺得還是有希望做好的!
主題如下:
Access control,Application Authentication,Application-Level Authorization,Audit Trails,Privacy,Encryption Support in Databases,Encryption and Authentication

首先,找一份資料庫的程式碼

沒什麼問題

QYYBAC9D3J-eyJsaWNlbnNlSWQiOiJRWVlCQUM5RDNKIiwibGljZW5zZWVOYW1lIjoi6LaF57qnIOeoi+W6j+WRmCIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IklJIiwiZmFsbGJhY2tEYXRlIjoiMjAyMC0wMS0wNCIsInBhaWRVcFRvIjoiMjAyMS0wMS0wMyJ9LHsiY29kZSI6IkFDIiwiZmFsbGJhY2tEYXRlIjoiMjAyMC0wMS0wNCIsInBhaWRVcFRvIjoiMjAyMS0wMS0wMyJ9LHsiY29kZSI6IkRQTiIsImZhbGxiYWNrRGF0ZSI6IjIwMjAtMDEtMDQiLCJwYWlkVXBUbyI6IjIwMjEtMDEtMDMifSx7ImNvZGUiOiJQUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjAtMDEtMDQiLCJwYWlkVXBUbyI6IjIwMjEtMDEtMDMifSx7ImNvZGUiOiJHTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjAtMDEtMDQiLCJwYWlkVXBUbyI6IjIwMjEtMDEtMDMifSx7ImNvZGUiOiJETSIsImZhbGxiYWNrRGF0ZSI6IjIwMjAtMDEtMDQiLCJwYWlkVXBUbyI6IjIwMjEtMDEtMDMifSx7ImNvZGUiOiJDTCIsImZhbGxiYWNrRGF0ZSI6IjIwMjAtMDEtMDQiLCJwYWlkVXBUbyI6IjIwMjEtMDEtMDMifSx7ImNvZGUiOiJSUzAiLCJmYWxsYmFja0RhdGUiOiIyMDIwLTAxLTA0IiwicGFpZFVwVG8iOiIyMDIxLTAxLTAzIn0seyJjb2RlIjoiUkMiLCJmYWxsYmFja0RhdGUiOiIyMDIwLTAxLTA0IiwicGFpZFVwVG8iOiIyMDIxLTAxLTAzIn0seyJjb2RlIjoiUkQiLCJmYWxsYmFja0RhdGUiOiIyMDIwLTAxLTA0IiwicGFpZFVwVG8iOiIyMDIxLTAxLTAzIn0seyJjb2RlIjoiUEMiLCJmYWxsYmFja0RhdGUiOiIyMDIwLTAxLTA0IiwicGFpZFVwVG8iOiIyMDIxLTAxLTAzIn0seyJjb2RlIjoiUk0iLCJmYWxsYmFja0RhdGUiOiIyMDIwLTAxLTA0IiwicGFpZFVwVG8iOiIyMDIxLTAxLTAzIn0seyJjb2RlIjoiV1MiLCJmYWxsYmFja0RhdGUiOiIyMDIwLTAxLTA0IiwicGFpZFVwVG8iOiIyMDIxLTAxLTAzIn0seyJjb2RlIjoiREIiLCJmYWxsYmFja0RhdGUiOiIyMDIwLTAxLTA0IiwicGFpZFVwVG8iOiIyMDIxLTAxLTAzIn0seyJjb2RlIjoiREMiLCJmYWxsYmFja0RhdGUiOiIyMDIwLTAxLTA0IiwicGFpZFVwVG8iOiIyMDIxLTAxLTAzIn0seyJjb2RlIjoiUlNVIiwiZmFsbGJhY2tEYXRlIjoiMjAyMC0wMS0wNCIsInBhaWRVcFRvIjoiMjAyMS0wMS0wMyJ9XSwiaGFzaCI6IjE2MDgwOTA5LzAiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-I7c5mu4hUCMxcldrwZEJMaT+qkrzrF1bjJi0i5QHcrRxk2LO0jqzUe2fBOUR4L+x+7n6kCwAoBBODm9wXst8dWLXdq179EtjU3rfJENr1wXGgtef//FNow+Id5iRufJ4W+p+3s5959GSFibl35YtbELELuCUH2IbCRly0PUBjitgA0r2y+9jV5YD/dmrd/p4C87MccC74NxtQfRdeUEGx87vnhsqTFH/sP4C2VljSo/F/Ft9JqsSlGfwSKjzU8BreYt1QleosdMnMK7a+fkfxh7n5zg4DskdVlNbfe6jvYgMVE16DMXd6F1Zhwq+lrmewJA2jPToc+H5304rcJfa9w==-MIIElTCCAn2gAwIBAgIBCTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE4MTEwMTEyMjk0NloXDTIwMTEwMjEyMjk0NlowaDELMAkGA1UEBhMCQ1oxDjAMBgNVBAgMBU51c2xlMQ8wDQYDVQQHDAZQcmFndWUxGTAXBgNVBAoMEEpldEJyYWlucyBzLnIuby4xHTAbBgNVBAMMFHByb2QzeS1mcm9tLTIwMTgxMTAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQAF8uc+YJOHHwOFcPzmbjcxNDuGoOUIP+2h1R75Lecswb7ru2LWWSUMtXVKQzChLNPn/72W0k+oI056tgiwuG7M49LXp4zQVlQnFmWU1wwGvVhq5R63Rpjx1zjGUhcXgayu7+9zMUW596Lbomsg8qVve6euqsrFicYkIIuUu4zYPndJwfe0YkS5nY72SHnNdbPhEnN8wcB2Kz+OIG0lih3yz5EqFhld03bGp222ZQCIghCTVL6QBNadGsiN/lWLl4JdR3lJkZzlpFdiHijoVRdWeSWqM4y0t23c92HXKrgppoSV18XMxrWVdoSM3nuMHwxGhFyde05OdDtLpCv+jlWf5REAHHA201pAU6bJSZINyHDUTB+Beo28rRXSwSh3OUIvYwKNVeoBY+KwOJ7WnuTCUq1meE6GkKc4D/cXmgpOyW/1SmBz3XjVIi/zprZ0zf3qH5mkphtg6ksjKgKjmx1cXfZAAX6wcDBNaCL+Ortep1Dh8xDUbqbBVNBL4jbiL3i3xsfNiyJgaZ5sX7i8tmStEpLbPwvHcByuf59qJhV/bZOl8KqJBETCDJcY6O2aqhTUy+9x93ThKs1GKrRPePrWPluud7ttlgtRveit/pcBrnQcXOl1rHq7ByB8CFAxNotRUYL9IF5n3wJOgkPojMy6jetQA5Ogc8Sm7RG6vg1yow==

安裝tomcat的時候,問題來了
我的jre過期了。。。
Oracle要麼連線超時要麼不讓我註冊
後來在java控制面板中下載了setup程式,然後安裝成功了
於是tomcat安裝順利解決
然後又報錯,程式碼一片飆紅
重安了另一個版本的java


瀏覽器輸入localhost:8083顯示頁面
成功
不得不感嘆我這個真是傻瓜教程(因為寫部落格的人就是傻瓜)
你以為我要開始轟轟烈烈搞核心期刊演算法了嘛!不!!首先,我們得讀懂程式碼~
而我,不會後端~
不得已開始找教程看。。。

專案當中的各個物件的呼叫流程如下:
JSP頁面 —— Action —— Service —— DAO —— (Hibernate框架) —— 資料庫

打個比方來說的話,JSP就像是飯店中的顧客;Action是服務員,顧客點什麼菜,給顧客端菜都由它負責;Service是廚師,Action送來的選單上的菜都是它做的;而DAO是廚房中的小工,幫忙洗菜摘菜等和原材料打交道都是它幹。

Servlet/JSP
  這是SUN公司(SUN現在已經被Oracle公司收購)主推的B/S架構的實現語言,是基於JAVA語言發展起來的,因為JAVA語言足夠簡單,而且很乾淨。
  Servlet/JSP技術的效能也是非常高的,不受平臺的限制,各個平臺基本上都可以使用。而且在執行中是使用多執行緒的處理方式,所以效能非常高。
  SUN公司最早推出的WEB技術推出的是Servlet程式,Servlet程式本身使用的時候有一些問題,所有的程式是採用JAVA程式碼+HTML的方式編寫的,即,要使用JAVA輸出語句,一行一行地輸出所有的HTML程式碼,之後,SUN公司受到了ASP的啟發,發展出了JSP(Java Server Page),JSP某些程式碼的編寫效果與ASP是非常相似的。這樣可以很方便地使一些ASP程式設計師轉向JSP的學習,加大市場的競爭力度。

Tomcat是一個實現了JAVA EE標準的最小的WEB伺服器,是Apache 軟體基金會的Jakarta 專案中的一個核心專案,由Apache、Sun 和其他一些公司及個人共同開發而成。因為Tomcat 技術先進、效能穩定,而且開源免費,因而深受Java 愛好者的喜愛並得到了部分軟體開發商的認可,成為目前比較流行的Web 應用伺服器。學習JavaWeb開發一般都使用Tomcat伺服器,該伺服器支援全部JSP以及Servlet規範


在Java Web開發當中,新建一個類繼承(派生)自HttpServlet類即可建立一個Servlet。

管理員登陸這裡

UserServiceImpl userService = new UserServiceImpl();
            User loginuser = userService.login(user);
            User tea = userService.findTea(user.getUsername(), user.getPassword());
            if(loginuser!=null||tea!=null){
                if(loginuser!=null){
                    //登入成功 請求轉發 將使用者存入session
                    request.getSession().setAttribute("user",loginuser);
                }else{
                    request.getSession().setAttribute("user",tea);
                }

是servlet層呼叫service層方法。 這個userService應該是一個 UserService 物件。用這個物件呼叫裡面login登入方法,裡面需要傳一個user物件,user包含賬號密碼。 這個login物件返回值是一個user物件,所以在用一個User物件接收。
找到service

public User login(User user) {
        User userByUsernameAndPassword = userDao.findUserByUsernameAndPassword(user.getUsername(), user.getPassword());

        return userByUsernameAndPassword;
    }

再找到dao

public User findUserByUsernameAndPassword(String username, String password) {
        try {
            String sql="select * from user where username=? and password=?";
            User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username, password);
            return user;
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("使用者為空");
            return null;
        }
    }

明白了,在這裡使用sql語句查詢到管理員姓名,密碼
去找這個jdbcTemplate

JdbcTemplate查詢-queryForObject返回String

public <T> T queryForObject(String sql, Class<T> requiredType)
執行查詢語句,返回一個指定型別的資料。

例如

public static void test03() throws Exception {
   String sql = "SELECT pname FROM product WHERE price=7777;";
   JdbcTemplate jdbcTemplate = new JdbcTemplate(DataSourceUtils.getDataSource());
   String str = jdbcTemplate.queryForObject(sql, String.class);
   System.out.println(str);
}

從這個連結裡知道了https://blog.csdn.net/wangjian530/article/details/89198344
“哦,原來後端和資料庫連線,用的是JDBC哦”
。。。
然後我就看了這個檔案
疑似連線資料庫的程式碼是這個:

public static Connection getConnection() throws SQLException {
        return  ds.getConnection();
    }

這段程式碼是把JDBC的操作封裝到一個連線類中。好處就是為了以後每次需要JDBC操作時百,直接呼叫這個類中的獲得Connection物件的方法即可,這樣提高了程式碼的複用性和可度維護性。否則,你每需要JDBC操作一次,就得去寫一遍連線資料庫的JDBC程式碼。因為LZ當前寫的程式碼量少,所以可能覺得這樣的封裝操作有沒有都無所謂,但是當程式程式碼量大的時候,知不封裝的話就得每一次道連線都得寫一次,並且每寫一次的同時就得測試一次連線,會比較麻煩的。

看了這個連結
https://blog.csdn.net/jingzi123456789/article/details/80497997
歷經千辛萬苦,終於知道連結屬性在哪裡了!!!
在properties檔案裡

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/db1
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000

尼瑪,我剛拿到程式碼時問我同學這個系統的管理員登陸介面的密碼是啥,她告訴我都是root
原來是她自己的資料庫的名字和密碼都是root
坑爹隊友!