Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 6.47 KB | None | 0 0
  1. /*
  2. Sistemas de Base de Dados
  3. Bruno LeitãoNº2181846
  4. */
  5.  
  6. /*
  7. Ficha 1
  8.  
  9. 1)
  10.     Utilizador - Esquema + definições de segurança;
  11.     Privilegio de Sistema - opções
  12.     Privilegio de Objeto - Ações sobre objetos
  13.     Role - Grupo de privilegios de sistema ou objetos de modo a serem atribuidos a utilizadores
  14.    
  15. 2)
  16.     a) CREATE USER <nome> IDENTIFIED BY <password>
  17.     b) GRANT CREATE SESSION To <nomeZ>
  18.     c) CREATE ROLE <nome.role>
  19.         GRANT SELECT ON <tabela> to <none.role>
  20.     d) GRANT <nome.role> to <nome.user>
  21.     e) REVOKE <nome.privilegio> from <nome.user>
  22. */
  23.  
  24. -----------------------------------
  25. --           Questão 1 a)       --
  26. -----------------------------------
  27.  
  28. conn sys/sys AS sysdba
  29.  
  30. START Z:\Pratica\scripts\Ficha01_users.SQL
  31.  
  32. DESC dba_users;
  33.  
  34. SELECT username, account_status
  35. FROM dba_users
  36. WHERE TO_CHAR(created, 'yyyymmdd') = TO_CHAR(SYSDATE, 'yyyymmdd');
  37.  
  38. -----------------------------------
  39. --           Questão 1 b)       --
  40. -----------------------------------
  41.  
  42. conn sys/sys AS sysdba
  43.  
  44. GRANT CREATE SESSION TO rep_ficha1;
  45. GRANT CREATE TABLE TO rep_ficha1;
  46.  
  47. DESC dba_sys_privs;
  48.  
  49. SELECT grantee, privilege
  50. FROM dba_sys_privs
  51. WHERE UPPER(grantee) = 'REP_FICHA1';
  52.  
  53. conn rep_ficha1/rep
  54.  
  55. SELECT privilege
  56. FROM user_sys_privs;
  57.  
  58. START Z:\Pratica\scripts\Ficha01_tabelas.SQL;
  59.  
  60. DESC user_tables
  61.  
  62. SELECT TABLE_NAME FROM user_tables;
  63.  
  64.  
  65. -----------------------------------
  66. --           Questão 1 c)       --
  67. -----------------------------------
  68.  
  69. conn rep_ficha1/rep
  70.  
  71. START Z:\Pratica\scripts\Ficha01_dados.SQL;
  72.  
  73. DESC aluno;
  74.  
  75. SELECT * FROM aluno;
  76.  
  77. DESC inscricao;
  78.  
  79. SELECT * FROM inscricao;
  80.  
  81. DESC exame;
  82.  
  83. SELECT * FROM exame;
  84.  
  85. -----------------------------------
  86. --           Questão 3 a)       --
  87. -----------------------------------
  88. conn rep_ficha1/rep
  89.  
  90. ALTER TABLE aluno add (username VARCHAR2(30));
  91.  
  92. DESC ALUNO;
  93.  
  94. DESC USER_TAB_COLUMNS;
  95.  
  96. SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH
  97. FROM USER_TAB_COLUMNS
  98. WHERE UPPER(TABLE_NAME) = 'ALUNO';
  99.  
  100. -----------------------------------
  101. --           Questão 3 b)       --
  102. -----------------------------------
  103.  
  104. conn sys/sys AS sysdba
  105.  
  106. SELECT a.nome, a.bi, d.username
  107. FROM DBA_USERS d JOIN REP_FICHA1.ALUNO a
  108. ON TO_CHAR(a.bi) = SUBSTR(d.username, -8);
  109.  
  110. UPDATE rep_ficha1.aluno a
  111. SET a.username = UPPER(SUBSTR(a.nome, 1, INSTR(a.nome, ' ') -1 ) ) || a.bi
  112. WHERE a.bi IN (SELECT a.bi
  113.                 FROM DBA_USERS d JOIN REP_FICHA1.ALUNO a
  114.                 ON TO_CHAR(a.bi) = SUBSTR(d.username, -8));
  115.  
  116. COMMIT;
  117.  
  118. conn rep_ficha1/rep
  119.  
  120. SELECT* FROM aluno;
  121.  
  122. -----------------------------------
  123. --           Questão 3 c)       --
  124. -----------------------------------
  125.  
  126. conn sys/sys AS sysdba
  127.  
  128. CREATE USER CARLOS10700007 IDENTIFIED BY CARLOS10700007;
  129.  
  130. UPDATE rep_ficha1.aluno a
  131. SET a.username = UPPER(SUBSTR(a.nome, 1, INSTR(a.nome, ' ') -1 ) ) || a.bi
  132. WHERE a.bi IN (SELECT a.bi
  133.                 FROM DBA_USERS d JOIN REP_FICHA1.ALUNO a
  134.                 ON TO_CHAR(a.bi) = SUBSTR(d.username, -8));
  135.                
  136. conn rep_ficha1/rep
  137.  
  138. SELECT* FROM aluno;
  139.  
  140. -----------------------------------
  141. --           Questão 4      --
  142. -----------------------------------
  143. conn sys/sys AS sysdba
  144.  
  145. --privilegio de sistema
  146. SELECT privilege
  147. FROM dba_sys_privs
  148. WHERE grantee IN ('CARLOS10700007', 'FILIPE10900009', 'SUSANA10800008');
  149.  
  150. --privilegio de objeto
  151. SELECT table_name, privilege
  152. FROM dba_tab_privs
  153. WHERE grantee IN ('CARLOS10700007', 'FILIPE10900009', 'SUSANA10800008');
  154.  
  155. --pesquisa de roles
  156. SELECT granted_role
  157. FROM dba_role_privs
  158. WHERE grantee IN ('CARLOS10700007', 'FILIPE10900009', 'SUSANA10800008');
  159.  
  160. -----------------------------------
  161. --           Questão 5      --
  162. -----------------------------------
  163. conn sys/sys AS sysdba
  164.  
  165. SELECT role
  166. FROM dba_roles
  167. WHERE role IN ('ROLE_ALUNO', 'CONNECT');
  168.  
  169. CREATE role ROLE_ALUNO;
  170.  
  171. grant role_aluno TO CARLOS10700007;
  172. grant role_aluno TO FILIPE10900009;
  173. grant role_aluno TO SUSANA10800008;
  174.  
  175. grant CONNECT TO role_aluno;
  176.  
  177. DESC dba_role_privs;
  178.  
  179. SELECT GRANTED_ROLE, GRANTEE
  180. FROM dba_role_privs
  181. WHERE GRANTED_ROLE IN ('ROLE_ALUNO', 'CONNECT');
  182.  
  183. grant CREATE VIEW TO role_aluno;
  184.  
  185. SELECT role, privilege
  186. FROM role_sys_privs
  187. WHERE role IN ('ROLE_ALUNO', 'CONNECT');
  188.  
  189. -----------------------------------
  190. --           Questão 6      --
  191. -----------------------------------
  192. conn sys/sys AS sysdba
  193.  
  194. CREATE USER jalmeida IDENTIFIED BY jalmeida;
  195.  
  196. SELECT username, account_status
  197. FROM dba_users
  198. WHERE TO_CHAR(created, 'yyyymmdd') = TO_CHAR(SYSDATE, 'yyyymmdd');
  199.  
  200. SELECT role
  201. FROM dba_roles
  202. WHERE role IN ('ROLE_FUNC', 'CONNECT');
  203.  
  204. CREATE ROLE role_func;
  205.  
  206. grant CONNECT TO ROLE_FUNC;
  207.  
  208. SELECT granted_role, grantee
  209. FROM dba_role_privs
  210. WHERE grantee = 'ROLE_FUNC';
  211.  
  212. GRANT role_func TO jalmeida;
  213.  
  214. conn rep_ficha1/rep
  215.  
  216. grant INSERT, SELECT ON aluno TO ROLE_FUNC;
  217. grant UPDATE(nome, morada) ON aluno TO ROLE_FUNC;
  218.  
  219. SELECT TABLE_NAME, PRIVILEGE
  220. FROM USER_TAB_PRIVS_MADE
  221. WHERE GRANTEE = 'ROLE_FUNC';
  222.  
  223. conn jalmeida/jalmeida
  224.  
  225. DESC rep_ficha1.aluno;
  226.  
  227. --Testar
  228. --Jalmeida deve fazer:
  229. --consultar tabelas de aluno
  230. -- inserir aluno
  231. INSERT INTO rep_ficha1.aluno (BI, NOME, MORADA) VALUES (10900010, 'Bruno Leitão', 'Rua Prior Doutor Cura Rachão');
  232. -- atualizar o nome e morada de um aluno --> esperamos que corra bem
  233. UPDATE rep_ficha1.aluno a
  234. SET a.nome = 'Bruno Miguel Ferreira Leitão', a.morada = 'Rua das flores'
  235. WHERE a.BI = 10900010;
  236. -- atualizar o bi de um aluno --> esperamos que dê erro
  237. UPDATE rep_ficha1.aluno a
  238. SET a.BI = 10900011
  239. WHERE a.BI = 10900010;
  240.  
  241. SELECT * FROM rep_ficha1.aluno;
  242.  
  243. -----------------------------------
  244. --           Questão 7      --
  245. -----------------------------------
  246.  
  247. conn sys/sys AS sysdba
  248.  
  249. GRANT CREATE VIEW TO rep_ficha1;
  250.  
  251. -- rep_ficha1
  252.  
  253. conn rep_ficha1/rep
  254.  
  255. -- criar vista v_exames
  256.  
  257. CREATE VIEW v_exames AS
  258. SELECT LOCAL, DATA, CATEGORIA
  259. FROM exame
  260. WHERE DATA > SYSDATE AND DATA  < SYSDATE + 30;
  261.  
  262. -- dar acesso á vista ao role_aluno
  263.  
  264. GRANT SELECT ON rep_ficha1.v_exames TO role_aluno;
  265. -- verificar vista foi criada (no dicionario de dados)
  266.  
  267.  
  268. -- testar -- entrar como aluno
  269.  
  270. conn FILIPE10900009/FILIPE10900009
  271.  
  272. -- pesquisar a vista --> conseguir aceder a vista
  273.  
  274. SELECT * FROM rep_ficha1.v_exames;
  275.  
  276. -----------------------------------
  277. --           Questão 8      --
  278. -----------------------------------
  279.  
  280. -- rep_ficha1
  281. -- criar vista v_dados_aluno
  282. -- dar acesso à vista ao role_aluno
  283. -- virificar vista foi criada (no dicionario de dados) (user_tab_privs_made)
  284. -- testar
  285. -- entrar como aluno
  286. -- pesquisar a vista --> conseguir aceder a vista
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement