5
 Outorgando privilégios para acesso à objetos no Firebird Pensar em segurança no seu banco de dados, envolve definir direitos de acesso aos elementos disponíveis: tabelas, procedimentos e gatilhos. À estes direitos de acesso chamamos privilégios, que podem ser concedidos ou revogados a um usuário ou grupo de usuários. Privilégios são outorgados diretamente aos usuários ou roles, através do comando SQL GRANT  e revogados através do comando SQL REVOKE  .  Ainda é muito grande o número de desenv olvedor es que não utilizam amplamente estes recursos de segurança em seus bancos de dados, talvez por desconhecerem as vantagens que isto representa. Usuários Os usuário de um banco de dados Firebird ficam armazenados em um banco de dados único (ISC4.GDB), e aplicam-se àqualquer banco de dados manipulado pelo servidor, independente do número de bancos de dados distintos que irão ser acessados. Ao fazer a conexão ao servidor/banco de dados sempre deve ser informado um usuário válido para o servidor, através do seu nome e senha. Existe um usuário com poderes plenos, chamado SYSDBA, que normalmente é o usuário utilizado para criar novos bancos de dados e manipular os direitos para os demais usuários. Sempre que você ver a expressão public, isto significa TODOS os usuários disponíveis no servidor. Usando Roles Uma ROLE   é um bilhete contendo um conjunto de privilégio(s) para uma ou mais tabelas ou visões. Semp re que um bilhete deste s é concedido à um usuário ele pass a a ter todos os privilégios do bilhete. Apenas um bilhete pode ser concedido por usuário. Um usuário ao conectar-se ao servidor pode fornecer uma role, e se esta estiver associada ao usuário, ele passa a obter as concessões desta. Se ele não utilizar a role ele terá apenas os direitos que lhe cabem diretamente ou repassados por outros usuários. O uso de roles  não é obrigatório , mas pode ser muito útil em ambientes com muitos usuários e uma diversidade ampla de perfis. Notação  Uma palavra com a letra final 's' entre parênteses significa uma ou mais entidades daquele tipo. Por exemplo: usuario(s): uma lista de um ou mais usuarios do SGBD (separados por virgula);  Uma palavra reservada entre colchetes significa que seu uso é opcional.  Possíveis alternativas  para uma parte de um comando serão separadas pela barra vertical : |  Palavras reservadas serão escritas simultaneamente em negrito e itálico.  Nomes de objetos criados por usuários serão escritos com a fonte normal.  Usaremos indistintamente minusculas (preferível) ou maiusculas para palavras reservadas. Por exemplo: GRANT   ou  g rant .

Firebird Reference

Embed Size (px)

Citation preview

5/10/2018 Firebird Reference - slidepdf.com

http://slidepdf.com/reader/full/firebird-reference 1/5

Outorgando privilégios para acesso à objetos noFirebird

Pensar em segurança no seu banco de dados, envolve definir direitos de acesso aos elementosdisponíveis: tabelas, procedimentos e gatilhos. À estes direitos de acesso chamamos privilégios,que podem ser concedidos ou revogados a um usuário ou grupo de usuários.

Privilégios são outorgados diretamente aos usuários ou roles, através do comando SQL GRANT e revogados através do comando SQL REVOKE .

Ainda é muito grande o número de desenvolvedores que não utilizam amplamente estesrecursos de segurança em seus bancos de dados, talvez por desconhecerem as vantagens queisto representa.

Usuários

Os usuário de um banco de dados Firebird ficam armazenados em um banco de dados único(ISC4.GDB), e aplicam-se àqualquer banco de dados manipulado pelo servidor, independente do

número de bancos de dados distintos que irão ser acessados. Ao fazer a conexão aoservidor/banco de dados sempre deve ser informado um usuário válido para o servidor, através doseu nome e senha.

Existe um usuário com poderes plenos, chamado SYSDBA, que normalmente é o usuárioutilizado para criar novos bancos de dados e manipular os direitos para os demais usuários.

Sempre que você ver a expressão public, isto significa TODOS os usuários disponíveis noservidor.

Usando Roles

Uma ROLE é um bilhete contendo um conjunto de privilégio(s) para uma ou mais tabelas ou

visões. Sempre que um bilhete destes é concedido à um usuário ele passa a ter todos osprivilégios do bilhete. Apenas um bilhete pode ser concedido por usuário.

Um usuário ao conectar-se ao servidor pode fornecer uma role , e se esta estiver associada aousuário, ele passa a obter as concessões desta. Se ele não utilizar a role  ele terá apenas osdireitos que lhe cabem diretamente ou repassados por outros usuários.

O uso de roles não é obrigatório, mas pode ser muito útil em ambientes com muitos usuários euma diversidade ampla de perfis.

Notação

• Uma palavra com a letra final 's' entre parênteses significa uma ou mais entidades daquele tipo.Por exemplo: usuario(s): uma lista de um ou mais usuarios do SGBD (separados por virgula);

• Uma palavra reservada entre colchetes significa que seu uso é opcional.

• Possíveis alternativas para uma parte de um comando serão separadas pela barra vertical : |

• Palavras reservadas serão escritas simultaneamente em negrito e itálico .

• Nomes de objetos criados por usuários serão escritos com a fonte normal.• Usaremos indistintamente minusculas (preferível) ou maiusculas para palavras reservadas. Porexemplo: GRANT ou grant .

5/10/2018 Firebird Reference - slidepdf.com

http://slidepdf.com/reader/full/firebird-reference 2/5

Sintaxe do comando GRANT

grant [select | insert | delete | update | references | execute | all]on [table tabela(s)] to [usuario(s) | role(s) | procedures(s) | public ]

[with [ grant | admin ] option]

Tipos de privilégios 

Privilégios de acesso: 

Aplicam-se à tabelas e visões do banco de dados. Pode ser dado um grant à uma tabelaou visão dos seguintes tipos:• select : direito de consultar, isto é, enxergar os dados de uma tabela/visão;

• insert : direito de inserir dados em uma tabela;

• delete : direito de excluir dados de uma tabela;

• update : direito de alterar dados de uma tabela. Podem ser especificados aindarestrições apenas para determinadas colunas da tabela.• references : é o privilégio que permite definir numa outra tabela, digamos dependentes, uma

chave estrangeira para a Chave Primária da tabela em questão• all : Garante todos os privilégios

Privilégios de execução 

Aplicam-se à procedimentos e gatilhos (stored procedures e triggers) através da cláusulaexecute.

Privilégios relacionados à usuários

Começaremos exemplificando os privilégios que podem ser concedidos àusuários sobre tabelase colunas. Neste exemplo, todos privilégios são concedidos à todos usuários na tabelaminhatabela:

grant all on minhatabela to public Aqui o usuário "bigboss" recebe o direito de atualizar a coluna salario da tabela funcionarios:grant update salario on funcionarios to bigboss

Para permitir que o usuário bob possa definir Chave Estrangeira em sua(s) tabelas(s)referenciando a Chave Primária de Funcionarios:grant references on funcionarios to bob

Passos para criar/usar uma role :

Para criar uma role usa-se o comando CREATE ROLE com a seguinte sintaxe:create role nomedarole

Para conceder privilégios àuma role , procede-se da mesma forma como se fosse um usuáriocomum:grant privilegio(s) on tabela(s) to nomedarole

Para conceder uma role àum ou mais usuários, usa-se novamente o comando GRANT :grant rolename(s) to user(s)

Para conectar-se ao servidor usando uma role (via ISQL):

connect bancodedados user usuario password senha role nomedarole

5/10/2018 Firebird Reference - slidepdf.com

http://slidepdf.com/reader/full/firebird-reference 3/5

Passagem de privilégios de um usuário para outro

Inicialmente somente o criador de um objeto (tabela, view, stored procedure, trigger, etc) possuitodos os privilégios sobre o objeto e ninguém mais.

O criador pode então conceder privilégios (discriminadamente) a outros usuários com um doscomandos vistos anteriormente. O direito de passar privilégios adiante pode ser concedido caso ocriador inclua a opção with grant option no final do comando grant .

Exemplo:grant all on minhatabela to martina with grant optionVemos que a usuária martina adquire o direito de passar a qualquer usuário os privilégios de

acesso que tenha (no caso todos) sobre a tabela minhatabela

De forma semelhante, uma role  pode ser passado adiante se foi concedido pelo seu criadorcom a opção with admin option: 

grant rolename(s) to user(s) with admin option

Privilégios relacionados com stored procedures e triggers

Para que usuários possam executar uma stored procedure, o seu criador deve conceder oprivilégio de execução (execute ) dessa stored procedure a esses usuarios via comando:grant execute on procedure procedure(s) to usuario(s)

Para que outras storeds procedures ou triggers possam chamar esta stored procedure o criadordela deve emitir o comando:grant execute on procedure procedure to outraprocedure(s)|

outratrigger(s)

Para permitir que uma stored procedure  ou trigger possa executar operações deacesso/atualização sobre uma tabela o criador da tabela (ou o criador da stored procedure, casotenha o(s) privilégio(s) apropriados sobre a tabela) deve executar o comando:

grant privilegio(s) on [table] tabela(s) to procedure procedure

Revogação de privilégios

Através do comando SQL revoke. Sintaxe:revoke privilégio(s) on [table] tabela from usuario(s)| procedure(s)|

trigger(s)| role(s)Restrições gerais sobre revogação de privilégios:

Apenas o usuário que outorgou privilégio(s) (via grant  ) pode revogá-lo(s) de um ou maisusuários.

Privilégio(s) outorgados por outros usuários (mesmo que idênticos) não são afetados, ou seja,privilégios são cumulativos. Por exemplo: se ambas, Ana e Beatriz, outorgaram um priviégio aClara através do comando:grant insert on departments to Clara,

e posteriormente Ana revoga o privilégio de Clara via comando:revoke insert on departments from Clara,

Clara continua podendo inserir linhas em departments pois ainda retém o privilégio concedidopor Beatriz.

5/10/2018 Firebird Reference - slidepdf.com

http://slidepdf.com/reader/full/firebird-reference 4/5

Ao revogar de um usuário “joao” privilégio(s) concedido(s) com grant option, o(s) privilégio(s)é(são) automaticamente removido(s) de todos os usuários a quem “joao” tenha repassadoesse(s) privilégio(s)

Obs: no padrão SQL2 este efeito é conseguido acrescentando a palavra reservada cascade ; se, no entanto, a palavra reservada restrict  fosse acrescentada, o comando falharia casohouvesse privilégios repassados por “joao” àoutros usuários.

Privilégio(s) concedidos a todos os usuários via grant ... to public só podem ser revogados depublic . Isto implica que se o mesmo privilégio foi concedido individualmente a um usuário, elecontinua retendo-o, pela regra 2 acima. Além disso, revogar de public não afeta privilégiosoutorgados àstored procedures.

Também a opção with grant option pode ser revogada sem afetar os privilégios recebidos nomesmo comando grant .

Obs: isto pode causar uma possível inconsistência caso o usuário “joao” de quem estamosrevogando o grant option, tenha repassado privilégios a outros usuários, e que os manteriam;veja os comentários acima sobre o tratamento dado pelo padrão SQL2.

Exemplos:

revoke execute on procedure minhaprocedure from joao

revoke minharole from mario

revoke update on minhatabela from minharole

revoke grant option for  all on minhatabela from christian

revoke insert, update on accounts from procedure money_transfer,

act_maint trigger show_user

revoke grant option for select on departments from Ana

Facilitando sua vida

Realmente havemos de convir que a manutenção de direitos, usuários e roles, é uma tarefapenosa, especialmente se tiver que ser executada manualmente. Por isto, é altamenterecomendável que além de uma boa documentação sobre usuários disponíveis, perfis (através deroles), e um mapeamento de tabelas/procedures restritas, uma ferramenta gráfica facilitará emmuito suas tarefas.

Existem várias opções, algumas gratuitas (estão disponíveis no site da Comunidade Firebird deLíngua Portuguesa para download ), para administração de segurança, escolha a sua e mãos àobra!

Trabalhando com usuários Firebird nas aplicações

Para um correto manejo dos usuários no Firebird, será preciso escolher uma suíte decomponentes que acesse a API do Firebird, manipulando diretamente as funções de criação,

alteração e exclusão de usuários e privilégios. Entre estas poderíamos destacar a FIB+ e IBO queoferecem recursos adicionais ao desenvolvedor.

Você pode (e deve) balancear a sua segurança entre usuários do Firebird e usuárioscadastrados pela aplicação. Para mais informações sobre esta e outras técnicas de segurança,recorra ao artigo “Uma visão prática de segurança em Aplicações com Firebird”.

5/10/2018 Firebird Reference - slidepdf.com

http://slidepdf.com/reader/full/firebird-reference 5/5

Artigo Original

Paulo Vaz(Colaborador da CFLP)

[email protected]  Comunidade Firebird de Língua Portuguesa

Visite a Comunidade em:

http://www.comunidade-firebird.org

A Comunidade Firebird de Língua Portuguesa foi autorizada pelo Autor do Original para divulgar este trabalho