Advertisement
Guest User

Untitled

a guest
Jan 17th, 2020
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE TABLE customer (
  2.   id        NUMBER(10)    NOT NULL,
  3.   username  VARCHAR2(30)  NOT NULL,
  4.   password  VARCHAR2(40)  NOT NULL
  5. );
  6.  
  7. ALTER TABLE customer add (
  8.   CONSTRAINT cutomer_pk PRIMARY KEY (id)
  9. );
  10.  
  11. ALTER TABLE customer add (
  12.   CONSTRAINT customer_uk UNIQUE (username)
  13. );
  14.  
  15. CREATE SEQUENCE customer_seq;
  16.  
  17.  
  18.  CREATE OR REPLACE FUNCTION get_hash (p_username  IN  VARCHAR2,
  19.                      p_password  IN  VARCHAR2)
  20.     RETURN VARCHAR2 AS
  21.     l_salt VARCHAR2(30) := 'customerSalt';
  22.   BEGIN
  23.  
  24.  
  25.     RETURN DBMS_CRYPTO.HASH(UTL_RAW.CAST_TO_RAW(UPPER(p_username) || l_salt || UPPER(p_password)),DBMS_CRYPTO.HASH_SH1);
  26.   END;
  27.  
  28.  
  29.        
  30.   CREATE OR REPLACE PROCEDURE add_customer (p_username  IN  VARCHAR2,
  31.                       p_password  IN  VARCHAR2) AS
  32.   BEGIN
  33.     INSERT INTO customer (
  34.       id,
  35.       username,
  36.       password
  37.     )
  38.     VALUES (
  39.       customer_seq.NEXTVAL,
  40.       UPPER(p_username),
  41.       get_hash(p_username, p_password)
  42.     );
  43.    
  44.     COMMIT;
  45.   END;
  46.  
  47. BEGIN
  48. add_customer('admin','1234');
  49. END;
  50. -------------------------
  51.  CREATE OR REPLACE PROCEDURE get_login (p_username  IN  VARCHAR2,
  52.                         p_password  IN  VARCHAR2) AS
  53.     login  VARCHAR2(1);
  54.    
  55.      BEGIN
  56.     SELECT'1'
  57.     INTO   login
  58.     FROM   customer
  59.     WHERE  username = UPPER(p_username)
  60.     AND    password = get_hash(p_username, p_password);
  61.   EXCEPTION
  62.     WHEN NO_DATA_FOUND THEN
  63.       RAISE_APPLICATION_ERROR(-20000, 'Invalid username/password.');
  64.   END;
  65.  -------------------------------
  66. CREATE OR REPLACE FUNCTION get_login_p (p_username  IN  VARCHAR2,
  67.                        p_password  IN  VARCHAR2)
  68.     RETURN BOOLEAN AS
  69.   BEGIN
  70.     get_login(p_username, p_password);
  71.     RETURN TRUE;
  72.   EXCEPTION
  73.     WHEN OTHERS THEN
  74.       RETURN FALSE;
  75.   END;
  76. -----------------------------------------------
  77. --------------------
  78. BEGIN
  79.   IF get_login_p('admin','1234') THEN
  80.     DBMS_OUTPUT.PUT_LINE('1');
  81.   ELSE
  82.     DBMS_OUTPUT.PUT_LINE('0');
  83.   END IF;
  84. END;
  85.  
  86. BEGIN
  87.   IF get_login_p('admin','shooooo') THEN
  88.     DBMS_OUTPUT.PUT_LINE('1');
  89.   ELSE
  90.     DBMS_OUTPUT.PUT_LINE('0');
  91.   END IF;
  92. END;
  93. -------------------------------------------------------------------------
  94.        
  95. CREATE OR REPLACE PROCEDURE change_password (p_username      IN  VARCHAR2,
  96.                              p_old_password  IN  VARCHAR2,
  97.                              p_new_password  IN  VARCHAR2) AS
  98.     v_rowid  ROWID;
  99.   BEGIN
  100.     SELECT ROWID
  101.     INTO   v_rowid
  102.     FROM   customer
  103.     WHERE  username = UPPER(p_username)
  104.     AND    password = get_hash(p_username, p_old_password)
  105.     FOR UPDATE;
  106.    
  107.     UPDATE customer
  108.     SET    password = get_hash(p_username, p_new_password)
  109.     WHERE  ROWID    = v_rowid;
  110.    
  111.     COMMIT;
  112.   EXCEPTION
  113.     WHEN NO_DATA_FOUND THEN
  114.       RAISE_APPLICATION_ERROR(-20000, 'Invalid username/password.');
  115.   END;
  116.  
  117.  
  118. EXEC change_password('admin','1234','123');
  119.  
  120.  
  121.  
  122. EXEC change_password('admin','kennedy','1234');
  123.        
  124. ------------------------------------------------------------------
  125. CREATE OR REPLACE PACKAGE customer_security AS
  126.  
  127.   FUNCTION get_hash (p_username  IN  VARCHAR2,
  128.                      p_password  IN  VARCHAR2)
  129.     RETURN VARCHAR2;
  130.    
  131.   PROCEDURE add_customer (p_username  IN  VARCHAR2,
  132.                       p_password  IN  VARCHAR2);
  133.  
  134.   PROCEDURE change_password (p_username      IN  VARCHAR2,
  135.                              p_old_password  IN  VARCHAR2,
  136.                              p_new_password  IN  VARCHAR2);
  137.  
  138.   PROCEDURE get_login (p_username  IN  VARCHAR2,
  139.                         p_password  IN  VARCHAR2);
  140.  
  141.   FUNCTION get_login_p (p_username  IN  VARCHAR2,
  142.                        p_password  IN  VARCHAR2)
  143.     RETURN BOOLEAN;
  144.  
  145. END;
  146. ----------------------------
  147.  
  148.  
  149.  
  150. CREATE OR REPLACE PACKAGE BODY customer_sequrity AS
  151.  
  152.   FUNCTION get_hash (p_username  IN  VARCHAR2,
  153.                      p_password  IN  VARCHAR2)
  154.     RETURN VARCHAR2 AS
  155.     l_salt VARCHAR2(30) := 'customerSalt';
  156.   BEGIN
  157.  
  158.  
  159.     RETURN DBMS_CRYPTO.HASH(UTL_RAW.CAST_TO_RAW(UPPER(p_username) || l_salt || UPPER(p_password)),DBMS_CRYPTO.HASH_SH1);
  160.   END;
  161.  
  162. PROCEDURE add_customer (p_username  IN  VARCHAR2,
  163.                       p_password  IN  VARCHAR2) AS
  164.   BEGIN
  165.     INSERT INTO customer (
  166.       id,
  167.       username,
  168.       password
  169.     )
  170.     VALUES (
  171.       customer_seq.NEXTVAL,
  172.       UPPER(p_username),
  173.       get_hash(p_username, p_password)
  174.     );
  175.    
  176.     COMMIT;
  177.   END;
  178.  
  179.  
  180.   PROCEDURE get_login (p_username  IN  VARCHAR2,
  181.                         p_password  IN  VARCHAR2) AS
  182.     login  VARCHAR2(1);
  183.    
  184.      BEGIN
  185.     SELECT'1'
  186.     INTO   login
  187.     FROM   customer
  188.     WHERE  username = UPPER(p_username)
  189.     AND    password = get_hash(p_username, p_password);
  190.   EXCEPTION
  191.     WHEN NO_DATA_FOUND THEN
  192.       RAISE_APPLICATION_ERROR(-20000, 'Invalid username/password.');
  193.   END;
  194.  
  195.   FUNCTION get_login_p (p_username  IN  VARCHAR2,
  196.                        p_password  IN  VARCHAR2)
  197.     RETURN BOOLEAN AS
  198.   BEGIN
  199.     get_login(p_username, p_password);
  200.     RETURN TRUE;
  201.   EXCEPTION
  202.     WHEN OTHERS THEN
  203.       RETURN FALSE;
  204.   END;
  205.  
  206.  
  207.   PROCEDURE change_password (p_username      IN  VARCHAR2,
  208.                              p_old_password  IN  VARCHAR2,
  209.                              p_new_password  IN  VARCHAR2) AS
  210.     v_rowid  ROWID;
  211.   BEGIN
  212.     SELECT ROWID
  213.     INTO   v_rowid
  214.     FROM   customer
  215.     WHERE  username = UPPER(p_username)
  216.     AND    password = get_hash(p_username, p_old_password)
  217.     FOR UPDATE;
  218.    
  219.     UPDATE customer
  220.     SET    password = get_hash(p_username, p_new_password)
  221.     WHERE  ROWID    = v_rowid;
  222.    
  223.     COMMIT;
  224.   EXCEPTION
  225.     WHEN NO_DATA_FOUND THEN
  226.       RAISE_APPLICATION_ERROR(-20000, 'Invalid username/password.');
  227.   END;
  228. END;
  229.  
  230.  ----------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement