Rabu, 28 Agustus 2019

How do you create a read only user in postgresql


Grant usage/select to a single table

If you only grant CONNECT to a database, the user can connect but has no other privileges. You have to grant USAGE on namespaces (schemas) and SELECT on tables and views individually like so:

GRANT CONNECT ON DATABASE postgres TO user1;
GRANT USAGE ON SCHEMA public TO user1;
GRANT SELECT ON table01 TO user1;


Multiple tables/views


you can grant permissions on all tables/views/etc in the schema using a single command rather than having to type them one by one:

GRANT SELECT ON ALL TABLES IN SCHEMA public TO user1;

This only affects tables that have already been created. More powerfully, you can automatically have default roles assigned to new objects in future:

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO user1;


Or you can create role before creating a user, like i usually do

-- Create a group
CREATE ROLE read_access_dwh;

-- Grant access to existing tables
GRANT USAGE ON SCHEMA dwh TO read_access_dwh;
GRANT SELECT ON ALL TABLES IN SCHEMA dwh TO read_access_dwh;

-- Grant access to future tables
ALTER DEFAULT PRIVILEGES IN SCHEMA dwhp GRANT SELECT ON TABLES TO read_access_dwh;

-- Create a final user with password
CREATE USER report_dwh WITH PASSWORD 'yourpassword';
GRANT CONNECT ON DATABASE postgres TO report_dwh;
GRANT read_access_dwh TO report_dwh;

Postgres Command Line Connection from shell


This article describes how to connect to a PostgreSQL database from the shell using the psql program.
You can use the psql program as a quick and easy way to access your databases directly.


PSQL Commands: Connect to PostgreSQL from shell

To connect to PostgreSQL cli:
  1. login to the server with SSH where the postgres database is located.

  2. At the shell, type the following command. Replace DBNAME with the name of the database, and USERNAME with the database username:

    psql DBNAME USERNAME

  3. At the Password prompt, type the database user's password. When you type the correct password, the psql prompt appears.

  4. After you access a PostgreSQL database, you can run SQL queries and more. Here are some common psql commands:

    • To view help for psql commands, type \?.
    • To view help for SQL commands, type \h.
    • To view information about the current database connection, type \conninfo.
    • To list the database's tables and their respective owners, type \dt.
    • To list all of the tables, views, and sequences in the database, type \z.
    • To exit the psql program, type \q.

Senin, 19 Agustus 2019

How to install SubversionEdge or CollabNet SVN on Centos


For any company in IT Department, versioning is a darn important part of the development process.

Software versioning is important because:
  • It maintains the history of your code and the sequence in which changes were made
  • It maintains the latest copy of your code in case your computer crashes
  • It helps manage code properly when collaborating with other developers
You’ll understand the importance right away, when a developer you’re working with makes and edit that can’t be reverted or when a client accidentally deletes a file.
Trust me that happens.

In this article, I’m going to talk about installing this very software on Centos


Installing SubversionEdge

because we will install CSVN in user mode, for that we must create CSVN user first.

[root@localhost ~]# adduser csvn
[root@localhost ~]# passwd csvn
Changing password for user csvn.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.


Step #1 The Prerequisites

So, we start with the prerequisites. The prerequisite for SubversionEdge is Java. Hence, to begin with, we’ll have to install Java.
Now, if you’re not sure if Java is already installed, you can fire the below command to check the same:

[root@localhost ~]# java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)

If Java is installed the Java version should be displayed. if java is not installed on your system, you can install java in the following url:


Step #2 Installing CollabNet SVN


Download the latest version of Subversion Edge from CollabNet. It should be a tar.gz file.

Then, use the below commands to install the software. Do remember to replace CollabNetSubversionEdge-5.2.4_linux-x86_64.tar.gz with the tar.gz file you’ve downloaded from CollabNet. and put the downloaded file into the folder /home

[root@localhost ~]# cd /home
[root@localhost home]#
[root@localhost home]# gzip -d CollabNetSubversionEdge-5.2.4_linux-x86_64.tar.gz
[root@localhost home]# tar xf CollabNetSubversionEdge-5.2.4_linux-x86_64.tar
[root@localhost home]# cd /home/csvn/bin/
[root@localhost bin]# ./csvn install
Detected RHEL or Fedora:
Installing the CSVN Console daemon..
Setting RUN_AS_USER to: 'root'. Please edit '../data/conf/csvn.conf' if this needs to be adjusted
Setting JAVA_HOME to: ''. Please edit '../data/conf/csvn.conf' if this needs to be adjusted.

[root@localhost bin]# ./csvn-httpd install
Detected RHEL or Fedora:
 Installing the Subversion Edge Apache Server daemon..

[root@localhost bin]# cd /home/
[root@localhost home]# chown csvn:csvn csvn/ -Rf

login as csvn user and edit file csvn.conf

[csvn@localhost ~]$ vi data/conf/csvn.conf

Setting RUN_AS_USER to: csvn

and back to root account again

CollabNet SVN should now be installed. All we need to do, is start their console and start using the application.
To start their console, fire the command

[root@localhost ~]# service csvn start
Starting CSVN Console...
...
CSVN Console started
Waiting for application to initialize (this may take a minute)...............................
CSVN Console is ready at http://localhost:3343/csvn

Once this command runs successfully, you can view CollabNet SVN at work by heading over to http://localhost:3343/csvn
That’s it! Hope you’ve got the service up and running. and you can adjust the server settings to the existing conditions


Good luck managing your repositories!

Install Java on Centos



INSTALL JAVA 


Download the latest JAVA  from  here or use the following command to download JAVA JDK

# wget --no-cookies \
--no-check-certificate \
--header "Cookie: oraclelicense=accept-securebackup-cookie" \
"https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.rpm" \
-O /tmp/jdk-8u201-linux-x64.rpm

once the JAVA package has been downloaded, install it using rpm as follows:

# rpm -Uvh /tmp/jdk-8u201-linux-x64.rpm

CONFIGURE JAVA

configure the newly installed JAVA package using alternatives as in:

# alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_201-amd64/jre/bin/java 20000
# alternatives --install /usr/bin/jar jar /usr/java/jdk1.8.0_201-amd64/bin/jar 20000
# alternatives --install /usr/bin/javac javac /usr/java/jdk1.8.0_201-amd64/bin/javac 20000
# alternatives --install /usr/bin/javaws javaws /usr/java/jdk1.8.0_201-amd64/jre/bin/javaws 20000
# alternatives --set java /usr/java/jdk1.8.0_201-amd64/jre/bin/java
# alternatives --set javaws /usr/java/jdk1.8.0_201-amd64/jre/bin/javaws
# alternatives --set javac /usr/java/jdk1.8.0_201-amd64/bin/javac
# alternatives --set jar /usr/java/jdk1.8.0_201-amd64/bin/jar

check the JAVA version running on your system:

# java -version

Jumat, 16 Agustus 2019

Fix ORA-03113: end-of-file on communication channel


One day my server died suddenly due to a power problem, this caused a problem with my Oracle database,
ORA-03113: end-of-file on communication channel.

[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Fri Aug 16 14:22:01 2019

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 4993982464 bytes
Fixed Size            2261808 bytes
Variable Size         1006636240 bytes
Database Buffers     3976200192 bytes
Redo Buffers            8884224 bytes
Database mounted.
ORA-03113: end-of-file on communication channel
Process ID: 4903
Session ID: 237 Serial number: 26032

After searching for ways to repair the server, I finally found the solution. Here are the steps:

[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Fri Aug 16 14:22:01 2019

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup mount;
ORACLE instance started.

Total System Global Area 4993982464 bytes
Fixed Size            2261808 bytes
Variable Size         1006636240 bytes
Database Buffers     3976200192 bytes
Redo Buffers            8884224 bytes
Database mounted.

SQL> SELECT GROUP# FROM V$LOG;

    GROUP#
----------
     1
     3
     2

SQL> alter database clear unarchived logfile group 1;
Database altered.

SQL> alter database clear unarchived logfile group 2;
Database altered.

SQL> alter database clear unarchived logfile group 3;
Database altered.

SQL> shutdown immediate;
ORA-01109: database not open


Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.

Total System Global Area 4993982464 bytes
Fixed Size            2261808 bytes
Variable Size         1006636240 bytes
Database Buffers     3976200192 bytes
Redo Buffers            8884224 bytes
Database mounted.
Database opened.
SQL>

If this method still fails, then there is a second method, which is as follows
Now, go into sqlplus without opening the database, just mounting it.

[oracle@localhost ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.4.0 Production on Fri Aug 16 14:45:09 2019

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup mount
ORACLE instance started.

Total System Global Area 4993982464 bytes
Fixed Size            2261808 bytes
Variable Size         1006636240 bytes
Database Buffers     3976200192 bytes
Redo Buffers            8884224 bytes
Database mounted.
SQL>

Now, you can increase your current db_recovery_file_dest_size, increased to 100G in my case:

SQL> alter system set db_recovery_file_dest_size = 100G scope=both;

System altered.

Now, you can shutdown and startup again and that previous error should be gone. The proper fix is to get rid of the recovery files. You do that using RMAN

[oracle@localhost ~]$ rman target /

Recovery Manager: Release 11.2.0.4.0 - Production on Fri Aug 16 14:49:39 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: DB11G (DBID=432722608, not open)

RMAN> backup archivelog all delete input;

Starting backup at 16-AUG-19
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=156 device type=DISK
specification does not match any archived log in the repository
backup cancelled because there are no files to backup
Finished backup at 16-AUG-19

RMAN> exit


Recovery Manager complete.

Wait a long time and your archivelog (that was using up all that space) will be gone. So, you can shutdown/startup your database and be back in business.

[oracle@jktdi009 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Fri Aug 16 14:52:16 2019

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> shutdown immediate;
ORA-01109: database not open


Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 4993982464 bytes
Fixed Size            2261808 bytes
Variable Size         1006636240 bytes
Database Buffers     3976200192 bytes
Redo Buffers            8884224 bytes
Database mounted.
Database opened.
SQL>

Minggu, 11 Agustus 2019

vsftpd configuration of the ftp server in my company


Just to remember the vsftpd configuration of the ftp server in my company

The following configuration is on centos 6

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
log_ftp_protocol=YES
connect_from_port_20=YES
xferlog_std_format=YES
nopriv_user=ftp
pam_service_name=vsftpd
listen=YES
tcp_wrappers=YES
pasv_enable=YES
pasv_max_port=1200
pasv_min_port=1026
port_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to Private FTP Server.
secure_chroot_dir=/home
one_process_model=NO
chroot_local_user=YES
allow_writeable_chroot=YES
guest_enable=NO
use_localtime=YES
#rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
seccomp_sandbox=NO

This works since 2011 after upgrading from Centos 5

Minggu, 04 Agustus 2019

If there are ORA-01092 and ORA-30012 errors together


Errors like this

ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-30012: undo tablespace 'UNDOTBS01' does not exist or of wrong type

if there are ORA-01092 and ORA-30012 errors together, here's how to resolve them

[oracle@localhost ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.3.0 Production on Mon Aug 5 10:23:32 2019

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

SQL> connect sys as sysdba
Enter password:
Connected to an idle instance.
SQL>

SQL> startup mount
ORACLE instance started.

Total System Global Area 535662592 bytes
Fixed Size 1375792 bytes
Variable Size 331350480 bytes
Database Buffers 197132288 bytes
Redo Buffers 5804032 bytes
Database mounted.

SQL> select * from v$tablespace;

TS# NAME INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
0 SYSTEM YES NO YES
1 SYSAUX YES NO YES
4 USERS YES NO YES
3 TEMP NO NO YES
6 EXAMPLE YES NO YES
9 RCRMAN YES NO YES
10 USERS_TBS YES NO YES
5 UNDOTBS2 YES NO YES
19 TESTTBS YES NO YES
14 TESTTB YES NO YES

TS# NAME INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
15 TESTDB YES NO YES

12 rows selected.

SQL> create pfile='/oracle/product/11.2.0/db_1/dbs/initbckorcl.ora' from spfile;

File created.

SQL> shutdown immediate
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.

Edit Pfile UNDO_TABLESPACE PARAMETER

ORCL.undo_tablespace='UNDOTBS01'
orcl.undo_tablespace='UNDOTBS01'
*.undo_tablespace='UNDOTBS02'

Change like this

ORCL.undo_tablespace='UNDOTBS02'
orcl.undo_tablespace='UNDOTBS02'
*.undo_tablespace='UNDOTBS02'

Startup with new pfile

SQL> startup pfile='/oracle/product/11.2.0/db_1/dbs/initbckorcl.ora';
ORACLE instance started.

Total System Global Area 535662592 bytes
Fixed Size 1375792 bytes
Variable Size 331350480 bytes
Database Buffers 197132288 bytes
Redo Buffers 5804032 bytes
Database mounted.
Database opened.
SQL>

SQL> create spfile from pfile;

File created.

SQL> create spfile from pfile='/oracle/product/11.2.0/db_1/dbs/initbckorcl.ora';

File created.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.

Total System Global Area 535662592 bytes
Fixed Size 1375792 bytes
Variable Size 331350480 bytes
Database Buffers 197132288 bytes
Redo Buffers 5804032 bytes
Database mounted.
Database opened.

SQL> show parameter undo;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS2


Selasa, 16 Juli 2019

How to Install Nginx on CentOS 7


How to Install Nginx on CentOS 7

Nginx [engine x] is free and open source high-performance web server. It also acts as a reverse proxy server, as well as. This page shows how to install Nginx server on a CentOS 7 or RHEL 7 and configure a static web site.

In this article, we will explain how to install, configure and manage Nginx HTTP web server on a CentOS 7 or RHEL 7 server using command line.


Install Nginx Web Server
  1. First update the system software packages to the latest version.

  2. # yum -y update

  3. Next, install Nginx HTTP server from the EPEL repository using the YUM package manager, or if you have not installed the epel repository you can install the nginx repository.

  4. Configure EPEL repo

    # yum install epel-release

    Configure Nginx repo for CentOS 7 & RHEL (Red Hat Enterprise Linux) version 7.x

    # vi /etc/yum.repos.d/nginx.repo

    Append following for CentOS 7.x:

    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
    gpgcheck=0
    enabled=1

    Append following for RHEL (Red Hat Enterprise Linux) version 7.x:

    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/mainline/rhel/7/$basearch/
    gpgcheck=0
    enabled=1

    Next, install Nginx

    # yum install nginx


Manage Nginx HTTP Server
  1. Once Nginx web server installed, you can start it first time and enable it to start automatically at system boot.

  2. # systemctl start nginx
    # systemctl enable nginx
    # systemctl status nginx

Configure firewalld to Allow Nginx Traffic
  1. By default, CentOS 7 and RHEL 7 built-in firewall is set to block Nginx traffic. To allow web traffic on Nginx, update the system firewall rules to permit inbound packets on HTTP and HTTPS using the commands below.

  2. # firewall-cmd --zone=public --permanent --add-service=http
    # firewall-cmd --zone=public --permanent --add-service=https
    # firewall-cmd --reload

Test Nginx Server on CentOS 7 and RHEL 7
  1. Now you can verify Nginx server by going to the following URL, a default nginx page will be shown.

  2. http://SERVER_DOMAIN_NAME_OR_IP

    You can also use the curl command to get same info using the cli:

    $ curl -I http://10.21.136.13
    $ curl http://10.21.136.13

Nginx Important Files and Directories
  • The default server root directory (top level directory containing configuration files): /etc/nginx.
  • The main Nginx configuration file: /etc/nginx/nginx.conf.
  • Server block (virtual hosts) configurations can be added in: /etc/nginx/conf.d.
  • The default server document root directory (contains web files): /usr/share/nginx/html.



Kamis, 04 Juli 2019

Changing DNS Search Order


Changing DNS Search Order

 

/etc/nsswitch.conf


Open /etc/nsswitch.conf file using text editor:

# vi /etc/nsswitch.conf

Look for hosts:

hosts: files dns mdns4

Set above order as per your requirement. Close and save the file.

host.conf – resolver configuration file


The file /etc/host.conf contains configuration information specific to the resolver library. It should contain one configuration keyword per line, followed by appropriate configuration information.

Open /etc/host.conf file

# vi /etc/host.conf

Find order line which specifies how host lookups are to be performed. It should be followed by one or more lookup methods, separated by commas. Valid methods are bind (dns server), hosts (/etc/hosts file), and nis (old method).

order hosts,bind
Save and close the file.


conclusion

 

The file /etc/nsswitch.conf will let you reconfigure the order of the name resolution. By default, the host file is the first, then the configured DNS. There could be more options.
The file /etc/hosts only lists IP addresses and hostnames (multiple names for one IP if you want) The file /etc/resolv.conf will list the default search domains, and will also list in sequence the name servers to use.

Minggu, 12 Mei 2019

How to monitor MySQL using Nagios


How to configuring Nagios to monitor your MySQL server. Before we begin, there are a few prerequisites that you have to fulfill


Prerequisites
  1. Operating System - CentOS.

  2. Nagios Core - Installed and configured.

  3. Nagios Plugins should be installed.

  4. MySQL server(or MariaDB) should be installed on your server.

MySQL User Creation
  1. Log in to your MySQL server with the following command.

  2. # mysql -u root -p

  3. Type in the following commands.

  4. mysql> CREATE USER 'nagios'@'localhost' IDENTIFIED BY 'nagiospasswd';
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'nagios'@'localhost';
    mysql> CREATE USER 'nagios'@'%' IDENTIFIED BY 'nagiospasswd';
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'nagios'@'%';
    mysql> flush privileges;

These commands create a user "nagios" that can be used by local host as well as remotely. We have also granted all privileges to the user.


Install of the perl-modules DBI and DBD::mysql

Log in to nagios server use the following command to install perl-modules DBI and DBD::mysql

# yum -y install perl-DBI
# yum -y install "perl(DBD::mysql)"


MySQL Plugin Installation
  1. Run the following command to download the "check_mysql_health-2.2.2.tar.gz" package.

  2. # wget https://labs.consol.de/assets/downloads/nagios/check_mysql_health-2.2.2.tar.gz

  3. Extract the downloaded package.

  4. # tar -zxvf check_mysql_health-2.2.2.tar.gz

  5. Change into the check_mysql_health-2.2.2 directory.

  6. # cd check_mysql_health-2.2.2

  7. Run the following commands to configure and install the plugin.

  8. # ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-perl=/usr/bin/perl
    # make
    # make install


Nagios Configuration for MySQL Monitoring

  1. "check_mysql_health" Command Definition

  2. The following file contains all the commands pertaining to Nagios. Open it in any text editor of your choice("vi" in this case).

    # vi /usr/local/nagios/etc/objects/commands.cfg

    Edit the file and add the "check_mysql_health" command block.

    define command{
    command_name check_mysql_health
    command_line $USER1$/check_mysql_health -H $ARG1$ --username $ARG2$ --password $ARG3$ --port $ARG4$ --mode $ARG5$
    }

  3. "check_mysql_health" Service Definition

  4. Open the file "hosttomonitor.cfg" to add the service definition to the host that will be monitored.

    # vi /usr/local/nagios/etc/servers/hosttomonitor.cfg

    Add the following service blocks of Connection-time, io thread and sql thread. This will perform different tasks.


    define service{

    use local-service
    host_name hosttomonitor
    service_description MySQL connection-time
    check_command check_mysql_health!192.168.30.10!nagios!nagiospasswd!3306!connection-time!
    }

    define service{
    use local-service
    host_name hosttomonitor
    service_description MySQL slave-io-running
    check_command check_mysql_health!192.168.30.10!nagios!nagiospasswd!3306!slave-io-running!
    }

    define service{

    use local-service
    host_name hosttomonitor
    service_description MySQL slave-sql-running
    check_command check_mysql_health!192.168.30.10!nagios!nagiospasswd!3306!slave-sql-running!
    }

  5. Restart the Nagios server.

  6. # service nagios restart

You can configure other MySQL services as well whose information can be found on the website.

https://labs.consol.de/nagios/check_mysql_health/index.html


Kamis, 09 Mei 2019

How to Install Nagios Plugins in CentOS


Prerequisites - Common

These are the common set of packages required for compiling most of the plugins. SNMP and required modules are included here are they are one of the most common types of network monitoring.

CentOS 6.x / 7.x

yum install -y gcc glibc glibc-common make gettext automake autoconf wget openssl-devel net-snmp net-snmp-utils epel-release
yum install -y perl-Net-SNMP

Download latest nagios-plugins source and install using following commands

cd /opt
wget http://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz
tar xzf nagios-plugins-2.2.1.tar.gz
cd nagios-plugins-2.2.1

Now compile and install nagios plugins

./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

Setup the nagios user:

useradd nagios
passwd nagios

Plugin Installation Location

The plugins will now be located in /usr/local/nagios/libexec/.