CRIAR E VERIFICAR USUARIOS ORACLE

ALMARTI 03/05/2005 15:05:33
#81447
Como criar, excluir, modificar, bloquear usuários no Oracle via Visual Basic. Tentei conexão.execut mas sempre dá caracteres inválidos, utilizando a SQL gerada pelo próprio Oracle. Como criar usários? Utilizo a versão 9i



CREATE USER "usuario" PROFILE "DEFAULT"
IDENTIFIED BY "senha" DEFAULT TABLESPACE "USERS"
ACCOUNT UNLOCK;
GRANT "CONNECT" TO "usuario";

USUARIO.EXCLUIDOS 03/05/2005 18:28:15
#81477
Se não me engano, na string criada para você utilizar no EXECUTE, substitua as aspas duplas por simples:

CREATE USER 'usuario' ....

FISH
ALMARTI 03/05/2005 18:53:48
#81484
Não funciona. Aspas simples, sem aspas, por srings, nada deu. Sempre Caracteres inválidos
USUARIO.EXCLUIDOS 03/05/2005 20:23:40
#81501
Ao criar um Usuário Oracle por meio de código, pelo método Execute de um Connection ou de um Command, você vai precisar executar vários comandos, na verdade.
O primeiro é o que cria efetivamente o usuário e tem a sintaxe bem similar á que você postou (deve separar a criação do objeto) e os demais são relacionados á dotação de direitos de acesso e trabalho. Assim, você postou:

CREATE USER "usuario" PROFILE "DEFAULT"
IDENTIFIED BY "senha" DEFAULT TABLESPACE "USERS"
ACCOUNT UNLOCK;
GRANT "CONNECT" TO "usuario";

Essa string deve ser dividida em duas, como em:

...
DB.Execute "CREATE USER 'usuario' PROFILE 'DEFAULT' IDENTIFIED BY 'senha' DEFAULT TABLESPACE 'USERS' ACCOUNT UNLOCK"
...
DB.Execute "GRANT 'CONNECT' TO 'usuario'"
...

==========================================

Observe que os símbolos de ponto-e-vírgula foram suprimidos do comando SQL original. Esse caractere é interpretado de forma equivocada quando da execução pontual (Execute do ADODB) e gera a mensagem de "Caracteres Inválidos".

Algumas dicas (mesmo que você não as tenha solicitado, quem sabe podem ajudar):


- O uso de nomes sempre em maiúscula, na lide com Oracle e para todos os objetos, incluindo as senhas, é receita para evitar problemas de interpretação em distintas plataformas (O Oracle pode ser "servido" desde um Linux, por exemplo).

- Evitar o uso de palavras-chave para nomear campos, usuários, tabelas ou quaisquer outros objetos Oracle sempre irá poupar problemas futuros, quer de manutenção, quer de migração. Palavras como ALIAS, AUDIT, DATE, DATA, LPT etc, portanto, devem ser evitadas.

- Tabelas Oracle funcionam bem com um grande número de campos, com poucos ou nenhum índice e com ausência de chaves de restrição (constraints), como as chaves primárias ou chaves externas. Porém, o desempenho é extremamente maior quando o número de campos é pequeno, há índices não-compostos para os campos e os relacionamentos se fazer presentes.

- Evitar o uso de valores nulos é uma excelente pedida. Ao criar um campo numérico, seu padrão pode ser zero, por exemplo. Mas em campos do tipo data, esse tratamento é mais complexo. Assim, há situações onde uma data não pode ser demonstrada ou seja, o campo deveria estar tecnicamente "nulo". Por exemplo, suponha o campo dt_fim_oper como um campo onde a data de encerramento de uma operação seja inserido. Se essa operação não terminar, e isso é uma das possibilidades, qual valor inserir? Inserindo NULL, os índices não serão adequadamente utilizados, no caso de uma seleção, por exemplo, ...WHERE dt_fim_oper IS NULL... Caso a estrutura tivesse o valor "31/12/9999", por outro lado, a seleção passaria á ser ...WHERE dt_fim_oper < TO_DATE('31/12/9999 00:00:00','DD/MM/YYYY HH24:MI:SS')... e os índices passaria á funcionar.
Mas não é tão simples. Para estes casos, há de se pesar a quantidade de registros que, durante a vida da tabela, teriam esse campo preenchido por "31/12/9999". Caso esse valor atinja 25% da tabela, inserir esse valor como padrão dá um resultado contrário ao esperado, ou seja, o índice passa á ser mais lento e o uso de acesso á disco, maior. Como resolver, então? Simples: Em adição á um campo data, como o do exemplo, acrescente um campo numérico, com precisão 1 e valor padrão = zero. Ao gravar a data, altere esse campo para um. Se fosse adicionado um campo FLAG_TERMINADO ao exemplo, a string de seleção passaria á ser: ...WHERE FLAG_TERMINADO = 0... e isso atuaria acionando os índices de uma forma bem mais eficiente.

- Utilizar SEQUENCES é uma excelente idéia para a auto-numeração de campos de identidade de registros. Mas o uso de SEQUENCES, por sí só, é apenas parte da solução. Junto aos SEQUENCES, é interessante utilizar-se de TRIGGERS que disparem os NEXTVAL dos SEQUENCES quando uma operação de adição seja realizada. Não caia na tentação de demonstrar o ID do novo registro antes de salvá-lo, (como em "SELECT SEQ_TB_USUARIOS.NEXTVAL AS ID FROM DUAL"), pois se ocorrer uma falha qualquer, mesmo alheia á aplicação, o valor do ID terá saltado, "de graça". Ainda com relação aos SEQUENCES, numerar notas fiscais com o uso de um SEQUENCE pressupõe que nenhum registro de uma tabela de notas fiscais poderá ser excluido (o que, aliás, deveria ser padrão mesmo). Dessa forma, se a orientação do cliente não se adapta muito bem á essa regra, o uso de SEQUENCES para esse tipo de numeração pode trazer aborrecimentos posteriores. é preferível o uso de uma tabela adicional, onde seja possível retroceder o valor do último numerador.

- O uso de VIEWS não-parametrizadas é excelente para combinar o poder do VB, do Crystal Reports e do Oracle. Porém, quando o número de registros combinados pelo retorno é muito elevado, uma vez que não há índices para VIEWS, o relatório pode se tornar muito lento. Para esses casos, dê preferência ao uso de tabelas temporárias (temporárias mesmo, aquelas que são criadas somente para a seção aberta e destruídas assim que a seção se encerra), pois a performance é muito maior. Já as VIEWS parametrizadas se saem muito bem, mesmo nestas situações.

- Ao criar uma tabela cujo volume de registros se estime que será muito elevado, crie essa tabela de forma PARCIONADA. Uma tabela parcionada permite separar logicamente seus registros (por exemplo, a partição "A" terá registros gerados entre 01/01/2000 e 31/12/2000, a partição "B" terá registros gerados entre 01/01/2001 e 31/12/2001 etc), pois os processos de pesquisa e filtragem serão bem otimizados com essa estrutura. Ao pesquisar uma tabela parcionada, pode-se definir em qual partição pesquisar, ou deixar que o SGDB decida isso.

- Evitar a utilização de tabelas de usuários específicas á aplicação, adotando os objetos USER do próprio Oracle para manipular o controle de acessos ao banco de dados é a opção mais acertada, pois além de minimizar a codificação de controle de mais uma (ou mais) tabela, permite que gatilhos disparem procedimentos de geração de LOG de utilização que, de outro modo, seriam bastante trabalhosos. Como adição, o desempenho e a fiabilidade são muito maiores em se adotando esse método de desenvolvimento.

- Não importa se a aplicação PRINCIPAL da base de dados será adotada para a plataforma Windows ou não. O desenho do esquema de dados deverá contemplar a possibilidade de migração de plataformas, bem como o acesso via WebForms e principalmente, otimizar o uso de Recordsets desconectados. Desta forma, se sua aplicação for executada concomitantemente á aplicações Web, o desempenho do serviço não se fará tão pesado ao servidor.

- Não há nenhum inconveniente que seja impeditivo, nem que não seja bem conhecido de todos nós, no uso de ODBC. Mas adotar o driver MSDAORA de forma direta (como em "Provider=MSDAORA;Data Source=BANCO;User ID=USUARIO;Password=SENHA"), o desempenho será até 80% superior (e esse teste eu fiz em vários diferentes clientes, com os mesmos resultados). Claro, para usufruir desse ganho de desempenho outras pequenas regras e "artifícios" da linguagem SQL devem ser observados e adotados. Por exemplo, analise uma seleção como:
"SELECT * FROM ESQUEMA1.TABELA1 A, ESQUEMA1.TABELA2 B WHERE A.ID = B.CAMPOCHAVE AND A.ID = 30 AND B.FLAG_PAGO = 1"
Ela será mais eficiente se reescrita como:
"SELECT * FROM (SELECT * FROM ESQUEMA1.TABELA1 WHERE ID = 30) A, (SELECT * FROM ESQUEMA1.TABELA2 WHERE FLAG_PAGO = 1) B WHERE A.ID = B.CAMPOCHAVE"
Dá mais trabalho, sem dúvidas, mas o ganho é o bastante para vale á pena.

- Consultas do tipo UNION / UNION ALL normalmente representam um problema se o retorno tiver de ser filtrado. O fato é que esse tipo de consulta gera um recordset que não possui índices. Ao utilizar-se das UNION / UNION ALL, certifique-se de que todos os filtros sejam feitos DURANTE essas consultas, e não posteriormente á elas.

- Evitar o uso do "SELECT *..." é uma boa dica de otimização, neste caso, dos recursos da estação de trabalho. Selecionar apenas e unicamente os campos que serão utilizados é uma regra para não extrapolar memória e recursos de tráfego de rede. Da mesma forma, evite abrir e fechar diversas tabelas para obter os valores visualizáveis entre as tabelas de um relacionamento. Assim, por exemplo, pode-se fazer como em:
...
RS2.Open "SELECT DESCRICAO FROM ESQUEMA1.TB_FORMAS_PAGTO WHERE ID = " & RS1.Fields("FORMA_PAGTO") & " "
If Not RS2.EOF = True Then Text1.Text = RS2.Fields("DESCRICAO")
RS2.Close
...
Porém o mais adequado seria que a instrução SQL do objeto RS1 já trouxesse a descrição, em lugar do ID (quando o ID não for mais necessário, claro), evitando assim um novo processo no serviço de dados.

Bom, chega de querer dar aula, daqui há pouco vocês me expulsam por ser tão chato. Espero que ajude.
ALMARTI 03/05/2005 21:23:51
#81513
Ufa!!! Que aula. Ah, recebi tambem seu recado anterior. Nao estou conseguindo te ligar. O erro agora mudou. Agora dá nome de usuario ou atribuição ausente. O que mais estarei fazendo errado?
USUARIO.EXCLUIDOS 04/05/2005 13:24:21
#81582
Aqui vai um trecho de uma rotina que cria um usuário Oracle, com direitos (quase) integrais. Espero que ajude.

Observe que para criar um usuário e seus direitos, no mínimo, o acesso ao Oracle deverá ser feito utilizando um User ID com direitos suficientes para a ação (apesar de ser óbvio, muitos colegas aqui podem não associar esse fato de imediato, porisso o comentário).

...
TrocaMSGProc "Gerando o usuário master da aplicação...Por favor, aguarde...", "Esquema de dados", 0
...
ioDB.Execute "CREATE USER ioPM IDENTIFIED BY VALUES '04C513033A0DD1C8' DEFAULT TABLESPACE SYSTEM TEMPORARY TABLESPACE TEMP PROFILE DEFAULT ACCOUNT UNLOCK "
...
TrocaMSGProc "Atribuindo direitos ao usuário master da aplicação...Por favor, aguarde...", "Esquema de dados", 3
...
ioDB.Execute "GRANT DBA TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CTXAPP TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT WKUSER TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CONNECT TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT OLAP_DBA TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT RESOURCE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT XDBADMIN TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT EJBCLIENT TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT JAVAIDPRIV TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT JAVA_ADMIN TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT JAVASYSPRIV TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT JAVA_DEPLOY TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT OEM_MONITOR TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT AQ_USER_ROLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT JAVAUSERPRIV TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT HS_ADMIN_ROLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT JAVADEBUGPRIV TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT WM_ADMIN_ROLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT AUTHENTICATEDUSER TO ioPM WITH ADMIN
OPTION "
...
ioDB.Execute "GRANT EXP_FULL_DATABASE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT IMP_FULL_DATABASE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT SALES_HISTORY_ROLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DELETE_CATALOG_ROLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT SELECT_CATALOG_ROLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT EXECUTE_CATALOG_ROLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT AQ_ADMINISTRATOR_ROLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT LOGSTDBY_ADMINISTRATOR TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT RECOVERY_CATALOG_OWNER TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT GATHER_SYSTEM_STATISTICS TO ioPM WITH ADMIN OPTION "
...
TrocaMSGProc "Alterando estrutura de esquema para o usuário master da aplicação...Por favor, aguarde...", "Esquema de dados", 6
...
ioDB.Execute "ALTER USER ioPM DEFAULT ROLE ALL "
...
TrocaMSGProc "Atribuindo direitos ao usuário master da aplicação...Por favor, aguarde...", "Esquema de dados", 9
...
ioDB.Execute "GRANT AUDIT ANY TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP USER TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT RESUMABLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER USER TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ANALYZE ANY TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT BECOME USER TO ioPM WITH ADMIN OPTION "
...
'ioDB.Execute "GRANT CREATE ROLE TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(PRIVILEGE => SYS.DBMS_RULE_ADM.CREATE_RULE_OBJ, GRANTEE = 'ioPM', GRANT_OPTION => TRUE ) END"
...
ioDB.Execute "GRANT CREATE TYPE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE USER TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE VIEW TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER SYSTEM TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT AUDIT SYSTEM TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE TABLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP PROFILE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER PROFILE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER SESSION TO ioPM WITH ADMIN OPTION "
...
'ioDB.Execute "GRANT DROP ANY ROLE TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(PRIVILEGE => SYS.DBMS_RULE_ADM.DROP_ANY_RULE,GRANTEE ='ioPM',GRANT_OPTION => TRUE) END "
...
ioDB.Execute "GRANT DROP ANY TYPE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP ANY VIEW TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT QUERY REWRITE TO ioPM WITH ADMIN OPTION "
...
'ioDB.Execute "GRANT ALTER ANY ROLE TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(PRIVILEGE => SYS.DBMS_RULE_ADM.ALTER_ANY_RULE, GRANTEE ='ioPM',GRANT_OPTION => TRUE) END "
...
ioDB.Execute "GRANT ALTER ANY TYPE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER DATABASE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE CLUSTER TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE LIBRARY TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE PROFILE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE SESSION TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE SYNONYM TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE TRIGGER TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP ANY INDEX TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP ANY TABLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT GRANT ANY ROLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT LOCK ANY TABLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT UNDER ANY TYPE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT UNDER ANY VIEW TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER ANY INDEX TO ioPM WITH ADMIN OPTION "
...
'ioDB.Execute "GRANT ALTER ANY TABLE TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(PRIVILEGE => SYS.DBMS_RULE_ADM.CREATE_ANY_RULE,GRANTEE ='ioPM',GRANT_OPTION => TRUE) END "
...
ioDB.Execute "GRANT CREATE ANY TYPE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE ANY VIEW TO ioPM WITH ADMIN OPTION "
...
'ioDB.Execute "GRANT CREATE OPERATOR TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(PRIVILEGE => SYS.DBMS_RULE_ADM.CREATE_RULE_SET_OBJ,GRANTEE ='ioPM',GRANT_OPTION => TRUE) END "
...
ioDB.Execute "GRANT CREATE SEQUENCE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE SNAPSHOT TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP TABLESPACE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT UNDER ANY TABLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER TABLESPACE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT BACKUP ANY TABLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE ANY INDEX TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE ANY TABLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE DIMENSION TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE INDEXTYPE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE PROCEDURE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DELETE ANY TABLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP ANY CLUSTER TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP ANY CONTEXT TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP ANY LIBRARY TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP ANY OUTLINE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP ANY SYNONYM TO ioPM WITH ADMIN OPTION "
...
'ioDB.Execute "GRANT DROP ANY TRIGGER TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(PRIVILEGE => SYS.DBMS_RULE_ADM.EXECUTE_ANY_RULE,GRANTEE ='ioPM',GRANT_OPTION => TRUE) END "
...
ioDB.Execute "GRANT EXECUTE ANY TYPE TO ioPM WITH ADMIN OPTION "
...
'ioDB.Execute "GRANT INSERT ANY TABLE TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE (PRIVILEGE => 'MANAGE_ANY', GRANTEE ='ioPM', ADMIN_OPTION => TRUE) END "
...
ioDB.Execute "GRANT SELECT ANY TABLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT UPDATE ANY TABLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER ANY CLUSTER TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER ANY LIBRARY TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER ANY OUTLINE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER ANY TRIGGER TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT COMMENT ANY TABLE TO ioPM WITH ADMIN OPTION "
...
'ioDB.Execute "GRANT CREATE TABLESPACE TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE (PRIVILEGE => 'DEQUEUE_ANY',GRANTEE ='ioPM',ADMIN_OPTION => TRUE) END "
...
'ioDB.Execute "GRANT DROP ANY OPERATOR TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(PRIVILEGE => SYS.DBMS_RULE_ADM.DROP_ANY_RULE_SET,GRANTEE ='ioPM',GRANT_OPTION => TRUE) END "
...
ioDB.Execute "GRANT DROP ANY SEQUENCE TO ioPM WITH ADMIN OPTION "
...
'ioDB.Execute "GRANT DROP ANY SNAPSHOT TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE (PRIVILEGE => 'ENQUEUE_ANY',GRANTEE ='ioPM',ADMIN_OPTION => TRUE) END "
...
ioDB.Execute "GRANT FORCE TRANSACTION TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT MANAGE TABLESPACE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ON COMMIT REFRESH TO ioPM WITH ADMIN OPTION "
...
'ioDB.Execute "GRANT ALTER ANY OPERATOR TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(PRIVILEGE => SYS.DBMS_RULE_ADM.ALTER_ANY_RULE_SET,GRANTEE ='ioPM',GRANT_OPTION => TRUE) END "
...
ioDB.Execute "GRANT ALTER ANY SEQUENCE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER ANY SNAPSHOT TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE ANY CLUSTER TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE ANY CONTEXT TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE ANY LIBRARY TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE ANY OUTLINE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE ANY SYNONYM TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE ANY TRIGGER TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP ANY DIMENSION TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP ANY DIRECTORY TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP ANY INDEXTYPE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP ANY PROCEDURE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT RESTRICTED SESSION TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ADMINISTER ENCRYPTION TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER ANY DIMENSION TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER ANY INDEXTYPE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER ANY PROCEDURE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER RESOURCE COST TO ioPM WITH ADMIN OPTION "
...
'ioDB.Execute "GRANT CREATE ANY OPERATOR TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(PRIVILEGE => SYS.DBMS_RULE_ADM.CREATE_ANY_RULE_SET,GRANTEE ='ioPM',GRANT_OPTION => TRUE) END "
...
ioDB.Execute "GRANT CREATE ANY SEQUENCE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE ANY SNAPSHOT TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DEBUG ANY PROCEDURE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP PUBLIC SYNONYM TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT EXECUTE ANY LIBRARY TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT FLASHBACK ANY TABLE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT GRANT ANY PRIVILEGE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT SELECT ANY SEQUENCE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE ANY DIMENSION TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE ANY DIRECTORY TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE ANY INDEXTYPE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE ANY PROCEDURE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE DATABASE LINK TO ioPM WITH ADMIN OPTION "
...
'ioDB.Execute "GRANT EXECUTE ANY OPERATOR TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(PRIVILEGE => SYS.DBMS_RULE_ADM.EXECUTE_ANY_RULE_SET,GRANTEE ='ioPM',GRANT_OPTION => TRUE) END "
...
ioDB.Execute "GRANT EXEMPT ACCESS POLICY TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT GLOBAL QUERY REWRITE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT UNLIMITED TABLESPACE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE PUBLIC SYNONYM TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DEBUG CONNECT SESSION TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP ROLLBACK SEGMENT TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT EXECUTE ANY INDEXTYPE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT EXECUTE ANY PROCEDURE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT FORCE ANY TRANSACTION TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT SELECT ANY DICTIONARY TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER ROLLBACK SEGMENT TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT CREATE ROLLBACK SEGMENT TO ioPM WITH ADMIN OPTION "
...
'ioDB.Execute "GRANT CREATE ENCRYPTION PROFILE TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(PRIVILEGE => SYS.DBMS_RULE_ADM.CREATE_EVALUATION_CONTEXT_OBJ,GRANTEE ='ioPM',GRANT_OPTION => TRUE) END "
...
ioDB.Execute "GRANT DROP ANY ENCRYPTION PROFILE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT DROP PUBLIC DATABASE LINK TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT ALTER ANY ENCRYPTION PROFILE TO ioPM WITH ADMIN OPTION "
...
ioDB.Execute "GRANT GRANT ANY OBJECT PRIVILEGE TO ioPM WITH ADMIN OPTION "
...
'ioDB.Execute "GRANT ADMINISTER DATABASE TRIGGER TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SYSTEM_PRIVILEGE (GRANTEE_NAME ='ioPM', PRIVILEGE_NAME => 'ADMINISTER_RESOURCE_MANAGER',ADMIN_OPTION => TRUE) END "
ioDB.Execute "GRANT CREATE ANY ENCRYPTION PROFILE TO ioPM WITH ADMIN OPTION "
...
'ioDB.Execute "GRANT CREATE PUBLIC DATABASE LINK TO ioPM WITH ADMIN OPTION BEGIN SYS.DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE( PRIVILEGE => SYS.DBMS_RULE_ADM.DROP_ANY_EVALUATION_CONTEXT,GRANTEE ='ioPM',GRANT_OPTION => TRUE) END BEGIN SYS.DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(PRIVILEGE => SYS.DBMS_RULE_ADM.ALTER_ANY_EVALUATION_CONTEXT,GRANTEE ='ioPM',GRANT_OPTION => TRUE) END BEGIN SYS.DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(PRIVILEGE => SYS.DBMS_RULE_ADM.CREATE_ANY_EVALUATION_CONTEXT, GRANTEE ='ioPM',GRANT_OPTION => TRUE) END BEGIN SYS.DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE( PRIVILEGE => SYS.DBMS_RULE_ADM.EXECUTE_ANY_EVALUATION_CONTEXT, GRANTEE ='ioPM', GRANT_OPTION => TRUE) END "
ioDB.Execute "ALTER USER ioPM QUOTA UNLIMITED ON TEMP QUOTA UNLIMITED ON SYSTEM "
...
ioDB.Execute "GRANT DELETE, INSERT, SELECT, UPDATE ON OPERADOR.TEMP_CARGO_REPORT2 TO ioPM "
...


P.S.: Desculpe não responder mais cedo, não tinha visto mais o tópico.
ALMARTI 04/05/2005 22:36:57
#81652
Ó“timo, consegui criar o User. Tambem criei uma rotina que exige letras e números na senha, desde que não comece com números. Como fazer então para expirar o User a cada x Dias? Há alguma tabela de verificação de datas de criação, bloqueio de usuários ou expiração?
Tópico encerrado , respostas não são mais permitidas