quarta-feira, 29 de junho de 2016

Segurança dos Dados

Níveis de Segurança dos Dados Informix

A segurança dos dados esta relacionada a assuntos de proteção dos dados a usuários sem autorização.
Um banco de dados seguro permite aos usuários só ter acesso ou modificar dados para os quais eles estão autorizados. Há vários níveis de privilégios em um banco de dados:
  • Privilégios ao nível de banco de dados
  • Privilégios ao nível de tabela
  • Privilégios ao nível de coluna

Privilégios ao Nível de Banco de Dados

Para ter acesso a um banco de dados, um usuário tem que ter o privilégio CONNECT ou um privilégio superior.

O Privilégio CONNECT

O privilégio CONNECT permite para um usuário especificar o banco de dados em um comando de DATABASE, mas o usuário não pode criar nem excluir tabelas e índices. Embora um usuário com o privilégio CONNECT não possa criar tabelas permanentes, o usuário pode criar views e tabelas temporárias.

O Privilégio RESOURCE

O privilégio RESOURCE dá aos usuários o privilégio CONNECT  e também a habilidade para criar e excluir tabelas e índices no banco de dados.

O Privilégio DBA

Um usuário com privilégio de DBA tem todos os privilégios RESOURCE como também a habilidade para conceder e revogar privilégios CONNECT, RESOURCE e DBA.
A única restrição colocada em usuários com o estado DBA é a inabilidade para revogar o privilégio de DBA deles próprios. Porém, um usuário com status de DBA pode conceder o privilégio a outro usuário que pode revogar isso do então concessor.

Concedendo Privilégios ao Nível de Banco de Dados

GRANT CONNECT TO PUBLIC;

GRANT CONNECT TO amilcar, ajm;

GRANT DBA TO amilcar;

Você pode usar o comando GRANT para conceder privilégios de acesso ao banco de dados a usuários. Os componentes do comando GRANT são:

Privilégio - É um dos tipos de acesso ao nível de banco de dados: CONNECT, RESOURCE ou DBA.
PUBLIC - É a palavra chave que você usa para especificar privilégios de acesso para todos usuários.
user-list - É uma lista de nomes de login para os usuários para quem você esta concedendo privilégios de acesso. Você pode entrar com um ou mais nomes, separados por vírgulas.

Exemplos:
No primeiro exemplo mostrado acima, o privilégio CONNECT é concedido a todos os usuários (PUBLIC).
No segundo exemplo, o privilégio RESOURCE é concedido só aos usuários amilcar e ajm.
No terceiro exemplo, é dado a amilcar o privilégio de DBA.

Privilégios ao Nível de Tabela /  Coluna

ALTER -  adicionar, excluir ou modificar colunas.
DELETE - remover linhas de uma tabela.
INDEX - criar índices em uma tabela.
SELECT - retornar informações das colunas de uma tabela.
UPDATE - alterar as informações das colunas de uma tabela.
INSERT - inserir linhas em uma tabela.
REFERENCES - referenciar colunas através de uma constraint referencial.
ALL - realizar toda e qualquer operação anterior.

Você pode especificar as operações que um usuário pode executar em uma tabela ou colunas dentro de uma tabela que você criou. Os privilégios que você pode conceder e pode revogar são mostrados abaixo.
Nenhum destes privilégios terá efeito até que o usuário tenha pelo menos o privilégio CONNECT ao banco de dados.

Concedendo Privilégios ao Nível de Tabela

GRANT ALL ON customer TO PUBLIC;

GRANT UPDATE ON orders TO amilcar WITH GRANT OPTION;

GRANT INSERT, DELETE ON items TO ajm AS amilcar;

Você pode usar o comando GRANT para especificar as operações que um usuário pode executar em uma tabela que você criou. Os componentes de um GRANT ao nível de tabela são:

Privilégio - é um ou mais tipos de acesso à tabela: ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE, REFERENCES, ALL.
Tabela ou View - é o nome da tabela ou View para a qual você concede privilégios de acesso.
PUBLIC - é a palavra chave que você usa para especificar privilégios de acesso para todos usuários.
user list - é uma lista de nomes de login de usuários para quem você esta concedendo os privilégios de acesso. Você pode entrar com um ou mais nomes, separados por vírgula.
WITH GRANT OPTION - Permite ao usuário ou lista de usuários no comando GRANT a habilidade de conceder o mesmo privilégio a outros usuários.
AS [user] - faz outro usuário como o concessor das permissões. Incluindo esta opção renuncia sua habilidade para revogar o privilégio concedido anteriormente.

No primeiro exemplo mostrado acima, são concedidos todos os privilégios a todos usuários (PUBLIC) na tabela customer. No segundo exemplo, amilcar recebe permissões de atualização na tabela order com a habilidade para dar a mesma permissão a outros usuários. No terceiro exemplo o concessor usa amilcar para conceder privilégios de INSERT e DELETE ao usuário ajm.

Concedendo Privilégios ao Nível de Coluna

  • Apenas os privilégios de SELECT, UPDATE e REFERENCES podem ser concedidos ao nível de coluna.
  • Os privilégios ao nível de coluna são concedidos da mesma forma que os privilégios ao nível de tabela, exceto pelo fato de que uma lista de colunas tem de acompanhar o comando GRANT.
Exemplos:
GRANT SELECT (company, fname, lname) ON customer TO PUBLIC;

GRANT INSERT, UPDATE (quantity), SELECT ON items TO amilcar;

Ao conceder privilégios para uma tabela, você pode especificar os privilégios de SELECT, UPDATE e de REFERENCES para aplicar somente sobre certas colunas na tabela.
No primeiro exemplo mostrado acima, o privilégio SELECT é concedido a todos usuários nas colunas company, fname e lname da tabela customer.
No segundo exemplo, o privilégio de UPDATE é concedido só na coluna quantity, mas são concedidos os privilegios de INSERT e SELECT em todas colunas da tabela.

Privilégios Padrão

Ao nível de Banco de Dados

Quando você cria um banco de dados, automaticamente você ja tem privilégios DBA.

Ao Nível de Tabela

Bancos de Dados Non-ANSI: Todos os privilégios, exeto ALTER e REFERENCES são concedidos a todos os usuários.

Bancos de Dados ANSI: nenhum privilégio padrão é concedido.

  • Privilégio Default ao nível de Banco de Dados
    Quando você cria um banco de dados, você é automaticamente o DBA daquele banco de dados e o único que tem acesso ao banco de dados. Se você quiser permitir que outros usuários tenham acesso ao banco de dados, voce tem que conceder a eles privilégios de CONNECT, RESOURCE ou DBA.
  • Privilégio Default ao nível de Tabelas
    Em um banco de dados que não são ANSI, o default é conceder privilégios ao nível de tabela (exceto ALTER) para todos os usuários (PUBLIC). Em um banco de dados ANSI, nenhum privilégio default ao nível de tabela é concedido. Você tem que conceder estes privilégios explicitamente.

Privilégios ao Nível de Store Procedure

Concedendo permissões

REVOKE DELETE ON orders FROM PUBLIC;
GRANT EXECUTE ON delete_proc TO PUBLIC;

Uma Store Procedure consiste de código (comandos SQL e Linguagem da Store Procedure) que é armazenado no banco de dados. Permissões para uma procedure são concedidas e revogadas igualmente com permissões a uma tabela. Você concede e revoga a pemissão de EXECUTE para uma stored procedure especifica.
O exemplo acima revoga de todos os usuários (exeto o dono da tabela) de apagar qualquer linha da tabela orders. O próximo comando GRANT permite aos usuários executar a store procedure delete_proc que pode conter código especial para excluir a tabela orders.

Revogando Privilégios ao Nível de Banco de Dados

Exemplos:
REVOKE CONNECT FROM amilcar;

REVOKE RESOURCE FROM ajm;

Você pode usar o comando REVOKE para revogar os privilégios de acesso ao banco de dados dos usuários. Os componentes de um comando REVOKE são:

Privilégio - é um dos tipos de acesso ao nivel de banco de dados: CONNECT, RESOURCE ou DBA.
PUBLIC- é a palavra chave que você usa para especificar os privilégios de acesso para todos usuários.
user list - é uma lista de nome de login de usuários para quem você está revogando os privilégios de acesso. Você pode entrar com um ou mais nomes separados por vírgula.

Se você revogar o privilégio de DBA ou RESOURCE de um ou mais usuários, eles passam a ter o privilégio CONNECT. Para revogar todos os privilégios no banco de dados dos usuários com status de DBA ou RESOURCE, você tem que revogar o CONNECT como foi revogado o DBA ou RESOURCE. No primeiro exemplo mostrado acima, o privilégio CONNECT é revogado de amilcar. No segundo exemplo, o privilégio de RESOURCE é revogado do usuário ajm. ajm tem agora o privilégio CONNECT.

Revogando Privilégios ao nível de Tabela

Exemplos:
REVOKE ALL ON orders FROM PUBLIC;

REVOKE DELETE, UPDATE ON customer FROM amilcar, ajm;

Você pode usar o REVOKE para prevenir operações especificas que um usuário pode executar em uma tabela que você criou. Os componentes de um comando REVOKE são:

Privilégio - é um ou mais dos tipos de acesso de tabela: ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE, REFERENCES, ALL.
Tabela ou View - é o nome da tabela ou da view da qual você revoga privilégios de acesso.
PUBLIC - é a palavra chave que você usa para especificar os privilégios de acesso de todos os usuários.
user list - é uma lista de nome de login de usuários para quem você está revogando os privilégios de acesso. Você pode entrar com um ou mais nomes separados por vírgula.

Embora você possa conceder privilégios de UPDATE e SELECT para colunas especificas, você não pode revogar estes privilégios coluna a coluna. Se você revogar os privilégios de UPDATE ou SELECT de um usuário, todos os privilégios UPDATE e SELECT que você concedeu a este usuário serão revogados.
No primeiro exemplo mostrado acima, são revogados todos os privilégios de todos os usuários (public) na tabela orders.
No segundo exemplo, são revogados os privilégios de DELETE e UPDATE dos usuarios amilcar e ajm na tabela customer.

Tabelas do Catálogo do Sistema 

  • sysusers  - privilégios concedidos ao nível do banco de dados
  • systabauth - privilégios concedidos ao nível de tabela
  • syscolauth - privilégios concedidos ao nivel de coluna
  • sysfragauth - privilégios concedidos aos fragmentos das tabelas
  • sysprocauth - privilégios concedidos em stored procedures
  • sysroleauth - roles que são concedidos aos usuários

segunda-feira, 25 de maio de 2015

Script Shell rapido e util para junções de colunas.

Saudações a todos, já faz um tempo que não escrevo no blog, falta de tempo.

Mas vamos ao que interessa, as vezes nos deparamos em situações que temos dois arquivos e precisamos fazer uma junção linha a linha desses dois arquivos.

Exemplo:

arquivo_1:

Shell
Amilcar
AJM
VERUM

arquivo_2:

Script
Moreti
Solutions
Solutions

então queremos a seguinte saida:

Saida:

Shell Script
Amilcar Moreti
AJM Solutions
VERUM Solutions

Nesse exemplo vou utilizar um shell script com o comando FOR.

set -f
IFS=' '
set -- $( cat arquivo_2 )

for i in `cat arquivo_1`
do printf "%s %s\n" "$i" "$1"
shift
done

sexta-feira, 7 de março de 2014

Tecnologia da Informação: HDR : Introdução

Tecnologia da Informação: HDR : Introdução: Esta seção abrange os seguintes tópicos relacionados à High Availability Data Replication: O que é HDR? Vantagens do HDR Disvantagens do...

quinta-feira, 6 de março de 2014

HDR : Introdução

Esta seção abrange os seguintes tópicos relacionados à High Availability Data Replication:

  • O que é HDR?
  • Vantagens do HDR
  • Disvantagens do HDR

O que é HDR?

High Availability Data Replication (HDR)  é um método para replicar dados a partir de um servidor primário para outro servidor (secundário). HDR replica qualquer banco de dados registrados no servidor primário para um servidor secundário. Enquanto que o servidor secundário é considerado uma duplicação do servidor primário, ele não vai conter dados de bancos que esteja configurado em modo “non-logged”. O banco de dados e esquemas existem, as declarações DML (Data Manipulation Language) são sempre modo “logged”, mas todos os dados inseridos, atualizados, ou excluidos não será replicado a menos que o banco de dados esteja em modo “logged”. O HDR assegura que o servidor secundário é sempre sincronizado com o servidor primario. Se o primario falhar, o servidor secundario pode ser usado como backup até que o servidor primário esteja disponivel novamente.

Vantagens do HDR

  • Alta disponibilidade: se o servidor primário falhar, acesso de gravação pode ser habilitado automaticamente no servidor secundário.
  • (Potencial) alívio Capacidade: Com outra cópia de seus dados disponível, você poderá rodar relatórios no servidor secundario, em vez de executá-los no primário. Isso ajuda a aumentar a taxa de transferência do servidor primário.
  • Replicação síncrona ou assíncrona: Atualização sincrona é quando um buffer de logical log no servidor primário só é concluida após o buffer de logical logs ter sido copiado para o buffer de replicação de dados, enviado através da rede, e uma confirmação é enviada de volta para o servidor primário que o buffer foi recebido. Com a atualização sincrona, você terá certeza de que as transações confirmadas no servidor primario também foi enviada para o servidor secundário. Atualização assíncrona é onde o servidor primario copia os buffers de logical logs para o buffer de replicação de dados, em seguida faz  flush do buffer de logical logs e um envio dos conteúdos do buffer de replicação de dados através de rede quando qualquer dos seguintes eventos ocorrerem:

    - O buffer de replicação de dados tornam-se cheios
    - A aplicação comita uma transação em um banco de dados sem buffer
    - O intervalo de tempo especificado pela configuração do parâmetro DRINTERVAL é atingida.

Disvantagens do HDR

  • Banco de dados em modo de log: somente bancos de dados com o log habilitado será replicado .
  • Escopo do banco de dados: A granularidade do HDR está no nível de banco de dados. Todas tabelas em log serão replicados.
  • Modo síncrono: Com a atualização síncrona pode haver um pequeno atraso na liberação de um buffer de logical logs por causa do tráfego de rede.
  • Modo assíncrono: Com a atualização assíncrona há um potencial para algumas transações confirmadas no primário de não serem replicadas para o secundario após uma falha.
  • Suporte de blobspace: Qualquer armazenamento tipo blob não será replicado.
  • Secundário Read Only: O servidor secundário é um servidor somente de leitura. todas as aplicações que necessitam de acesso de gravação deve utilizar o primário.

quinta-feira, 27 de fevereiro de 2014

Tecnologia da Informação: cpio

Tecnologia da Informação: cpio: faz cópia (salva e restaura) de arquivos através de listas. SINTAXE: cpio –o [a m c B v] cpio –i [c v B d u m] cpio –p [a m d v u] dire...

cpio

faz cópia (salva e restaura) de arquivos através de listas.

SINTAXE:

cpio –o [a m c B v]

cpio –i [c v B d u m]

cpio –p [a m d v u] diretório

DESCRIÇÃO:

-o Lê arquivos de entrada padrão gravando tais arquivos na saída especificada pelo redirecionamento (output)
-i Extrai arquivos de entrada padrão para o diretório corrente (input)
-p Copia arquivos de entrada padrão para um diretório.

 

FLAGS

-m Mantém a data de modificação do arquivo
-a A data do último acesso do arquivo é alterada para a data corrente
-B A entrada/saída é manipulada em blocos de 512 bytes; se omitido este flag, o buffer default é de 512 bytes
-c Grava informações do header da lista de arquivos em formato ASCII, visando a portabilidade para outros sistemas UNIX.
-d Diretórios são criados se necessário
-v Exibe o nome dos arquivos que estão sendo copiados ou restaurados
-t Informa a tabela de conteúdo da lista, mas nenhum arquivo será copiado
-u Copia incondicional; por default um arquivo antigo não substitui um arquivo novo com o mesmo nome. Com esta opção será possivel
device Nome do arquivo especial caracter que representa o device

 

COMENTÁRIOS:

- o cpio só restaura arquivos que foram copiados por ele.

- o cpio é utilizado para fazer cópias através de listas de nomes de arquivos, trabalhando com a entrada e saída.

EXEMPLOS:

Cópias de disco para mídias

# ls | cpio –ocvB > /dev/rmt/0m

# find . –print | cpio –ovB > /dev/st0

# cpio –ocvB <lista> > /dev/rmt/0m

# cat lista |cpio –ovB > /dev/st0

# ls |cpio –ovcB > /dev/rmt/0m

Listar arquivos da mídia

# cpio –itvcB < /dev/rmt/0m

# cpio –itvB < /dev/st0

# cpio –itv < /dev/st0

Restaurar arquivos da mídia

# cpio –ivcB < /dev/rmt/0m

# cpio –iv < /dev/st0

# cpio –iv “arq” < /dev/rmt/0m

# cpio – ivBc < /dev/rmt/0m

# cpio –ivu < /dev/st0

Cópia para diretórios

# find . –print | cpio –pd /home/ajmsolutions/dir

sexta-feira, 11 de outubro de 2013

Script para inicialização automatica do informix

Um script que acabei de escrever para inicialização automatica, abraço a todos

 

#! /bin/sh
# Copyright (c) 1995-2013 ajm Solutions, Brazil.
#
# Author: Amilcar de Jesus Moreti <amilcar@ajmsolutions.com.br>
#
# /etc/init.d/informix
#
#   and symbolic its link
#
# /usr/sbin/rcifx
#
### BEGIN INIT INFO
# Provides:       informix
# Required-Start: cron
# Required-Stop:
# Default-Start:  2 3 5
# Default-Stop:   0 1 6
# Short-Description: Startup Informix
# Description:    Startup Informix Dynamic Server
### END INIT INFO

. /etc/rc.status

export CONFIG="/etc/ifx.conf"

if [ ! -f $CONFIG ] ; then
        echo "file: $CONFIG not found"
        exit 6
fi

test -x $CONFIG || exit 5

. $CONFIG

export onInit="$INFORMIXDIR/bin/oninit"
export onMode="$INFORMIXDIR/bin/onmode"
serverInst="tst prj"

test -x $onInit || exit 5

rc_reset
case "$1" in
    start)
        echo "Initializing Informix Dynamic Server"
        for ifxServer in ${serverInst}
        do
                INFORMIXSERVER=$ifxServer
                ONCONFIG=onconfig.$ifxServer
                export INFORMIXSERVER ONCONFIG
                echo "Initializing Instance $ifxServer"
                su informix -c "$onInit" >/dev/null 2>&1
                rc_status -v
        done
        ;;
    stop)
        echo -n "Stoping Informix Dynamic Server"
        for ifxServer in ${serverInst}
        do
                INFORMIXSERVER=$ifxServer
                ONCONFIG=onconfig.$ifxServer
                export INFORMIXSERVER ONCONFIG
                echo "Stoping Instance $ifxServer"
                su informix -c "$onMode -ky" >/dev/null 2>&1
                rc_status -v
        done
        ;;
    *)
      echo "Usage: $0 {start|stop}"
      exit 1
      ;;
esac
rc_exit