<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Data Security &#8211; Database Research &amp; Development</title>
	<atom:link href="https://www.dbrnd.com/tag/data-security/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.dbrnd.com</link>
	<description>BIGData &#124; NoSQL &#124; MSSQL &#124; MySQL &#124; PostgreSQL</description>
	<lastBuildDate>Sat, 20 Apr 2019 18:30:58 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>
	<item>
		<title>SQL Server: Find Stored Procedures which use Dynamic SQL and Temporary Table</title>
		<link>https://www.dbrnd.com/2019/04/sql-server-find-stored-procedures-which-use-dynamic-sql-and-temporary-table/</link>
					<comments>https://www.dbrnd.com/2019/04/sql-server-find-stored-procedures-which-use-dynamic-sql-and-temporary-table/#respond</comments>
		
		<dc:creator><![CDATA[Anvesh Patel]]></dc:creator>
		<pubDate>Mon, 08 Apr 2019 18:30:46 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server DBA Script]]></category>
		<category><![CDATA[Anvesh Patel]]></category>
		<category><![CDATA[Data Security]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[database research and development]]></category>
		<category><![CDATA[dbrnd]]></category>
		<category><![CDATA[dynamic sql]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[SQL Injection]]></category>
		<category><![CDATA[SQL Query]]></category>
		<category><![CDATA[SQL Server Administrator]]></category>
		<category><![CDATA[SQL Server Monitoring]]></category>
		<category><![CDATA[SQL Server Performance Tunning]]></category>
		<category><![CDATA[SQL Server Tips and Tricks]]></category>
		<category><![CDATA[Stored Procedure]]></category>
		<category><![CDATA[Temp Table]]></category>
		<category><![CDATA[TSQL]]></category>
		<guid isPermaLink="false">https://www.dbrnd.com/?p=4076</guid>

					<description><![CDATA[Whenever you are searching for SQL query optimization tips or prevent SQL injection tips, you can find few common suggestions like: Please do not use Dynamic SQL in your Stored Procedure. Please try to avoid the use of Temp Tables. I always tell to database developers, please try to avoid the use of Dynamic SQL [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2019%2F04%2Fsql-server-find-stored-procedures-which-use-dynamic-sql-and-temporary-table%2F&amp;linkname=SQL%20Server%3A%20Find%20Stored%20Procedures%20which%20use%20Dynamic%20SQL%20and%20Temporary%20Table" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2019%2F04%2Fsql-server-find-stored-procedures-which-use-dynamic-sql-and-temporary-table%2F&amp;linkname=SQL%20Server%3A%20Find%20Stored%20Procedures%20which%20use%20Dynamic%20SQL%20and%20Temporary%20Table" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2019%2F04%2Fsql-server-find-stored-procedures-which-use-dynamic-sql-and-temporary-table%2F&amp;linkname=SQL%20Server%3A%20Find%20Stored%20Procedures%20which%20use%20Dynamic%20SQL%20and%20Temporary%20Table" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_pinterest" href="https://www.addtoany.com/add_to/pinterest?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2019%2F04%2Fsql-server-find-stored-procedures-which-use-dynamic-sql-and-temporary-table%2F&amp;linkname=SQL%20Server%3A%20Find%20Stored%20Procedures%20which%20use%20Dynamic%20SQL%20and%20Temporary%20Table" title="Pinterest" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_reddit" href="https://www.addtoany.com/add_to/reddit?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2019%2F04%2Fsql-server-find-stored-procedures-which-use-dynamic-sql-and-temporary-table%2F&amp;linkname=SQL%20Server%3A%20Find%20Stored%20Procedures%20which%20use%20Dynamic%20SQL%20and%20Temporary%20Table" title="Reddit" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_pocket" href="https://www.addtoany.com/add_to/pocket?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2019%2F04%2Fsql-server-find-stored-procedures-which-use-dynamic-sql-and-temporary-table%2F&amp;linkname=SQL%20Server%3A%20Find%20Stored%20Procedures%20which%20use%20Dynamic%20SQL%20and%20Temporary%20Table" title="Pocket" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.dbrnd.com%2F2019%2F04%2Fsql-server-find-stored-procedures-which-use-dynamic-sql-and-temporary-table%2F&#038;title=SQL%20Server%3A%20Find%20Stored%20Procedures%20which%20use%20Dynamic%20SQL%20and%20Temporary%20Table" data-a2a-url="https://www.dbrnd.com/2019/04/sql-server-find-stored-procedures-which-use-dynamic-sql-and-temporary-table/" data-a2a-title="SQL Server: Find Stored Procedures which use Dynamic SQL and Temporary Table"></a></p><p>Whenever you are searching for SQL query optimization tips or prevent SQL injection tips, you can find few common suggestions like: Please do not use Dynamic SQL in your Stored Procedure. Please try to avoid the use of Temp Tables.</p>
<blockquote><p>I always tell to database developers, please try to avoid the use of Dynamic SQL and Temp Table in your Stored Procedures.</p></blockquote>
<blockquote><p>A Temp Table requires additional CPU/IO which degrades the query performance. A Dynamic SQL is not safe against the SQL Injection and It also compiles data every time which requires more Memory. </p></blockquote>
<blockquote><p>Here, I am sharing one of the important scripts which gives you list of SQL Server Stored Procedures, which use the Dynamic SQL and Temp Table.<br />
You can easily get the list of Stored Procedures and can make plans of modifying it.</p></blockquote>
<blockquote><p>Prepared this script using sys.dm_exec_describe_first_result_set and sys.procedures where error number 4 = Dynamic SQL and error number 10 = Temporary Table.</p></blockquote>
<pre class="crayon-plain-tag">SELECT  
	SP_Name
	,error_message
	,error_type_desc 
FROM (SELECT schema_name(schema_id)+'.'+name SP_Name FROM sys.procedures) AS T
CROSS APPLY sys.dm_exec_describe_first_result_set (SP_Name, NULL, 0) 
WHERE error_type IN (4,10)</pre> </p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbrnd.com/2019/04/sql-server-find-stored-procedures-which-use-dynamic-sql-and-temporary-table/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server: Encrypt Column data using Symmetric Key Encryption</title>
		<link>https://www.dbrnd.com/2017/04/sql-server-encrypt-column-data-using-symmetric-key-encryption-data-security-aes/</link>
		
		<dc:creator><![CDATA[Anvesh Patel]]></dc:creator>
		<pubDate>Tue, 18 Apr 2017 16:16:55 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[AES]]></category>
		<category><![CDATA[Anvesh Patel]]></category>
		<category><![CDATA[Column encryption]]></category>
		<category><![CDATA[Data Security]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[database research and development]]></category>
		<category><![CDATA[dbrnd]]></category>
		<category><![CDATA[Decryption]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[SQL Query]]></category>
		<category><![CDATA[SQL Server Administrator]]></category>
		<category><![CDATA[SQL Server Error]]></category>
		<category><![CDATA[SQL Server Monitoring]]></category>
		<category><![CDATA[SQL Server Performance Tuning]]></category>
		<category><![CDATA[SQL Server Programming]]></category>
		<category><![CDATA[SQL Server Tips and Tricks]]></category>
		<category><![CDATA[SYMMETRIC KEY]]></category>
		<category><![CDATA[TSQL]]></category>
		<guid isPermaLink="false">https://www.dbrnd.com/?p=5041</guid>

					<description><![CDATA[The Database Security is a very common and one of the major aspects for DBA to keep data secure. If you don&#8217;t know about SQL Server TDE, please read below article which uses for data encryption in SQL Server. SQL Server: Transparent Data Encryption (TDE) to Encrypt a Database There are different ways to encrypt [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2017%2F04%2Fsql-server-encrypt-column-data-using-symmetric-key-encryption-data-security-aes%2F&amp;linkname=SQL%20Server%3A%20Encrypt%20Column%20data%20using%20Symmetric%20Key%20Encryption" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2017%2F04%2Fsql-server-encrypt-column-data-using-symmetric-key-encryption-data-security-aes%2F&amp;linkname=SQL%20Server%3A%20Encrypt%20Column%20data%20using%20Symmetric%20Key%20Encryption" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2017%2F04%2Fsql-server-encrypt-column-data-using-symmetric-key-encryption-data-security-aes%2F&amp;linkname=SQL%20Server%3A%20Encrypt%20Column%20data%20using%20Symmetric%20Key%20Encryption" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_pinterest" href="https://www.addtoany.com/add_to/pinterest?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2017%2F04%2Fsql-server-encrypt-column-data-using-symmetric-key-encryption-data-security-aes%2F&amp;linkname=SQL%20Server%3A%20Encrypt%20Column%20data%20using%20Symmetric%20Key%20Encryption" title="Pinterest" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_reddit" href="https://www.addtoany.com/add_to/reddit?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2017%2F04%2Fsql-server-encrypt-column-data-using-symmetric-key-encryption-data-security-aes%2F&amp;linkname=SQL%20Server%3A%20Encrypt%20Column%20data%20using%20Symmetric%20Key%20Encryption" title="Reddit" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_pocket" href="https://www.addtoany.com/add_to/pocket?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2017%2F04%2Fsql-server-encrypt-column-data-using-symmetric-key-encryption-data-security-aes%2F&amp;linkname=SQL%20Server%3A%20Encrypt%20Column%20data%20using%20Symmetric%20Key%20Encryption" title="Pocket" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.dbrnd.com%2F2017%2F04%2Fsql-server-encrypt-column-data-using-symmetric-key-encryption-data-security-aes%2F&#038;title=SQL%20Server%3A%20Encrypt%20Column%20data%20using%20Symmetric%20Key%20Encryption" data-a2a-url="https://www.dbrnd.com/2017/04/sql-server-encrypt-column-data-using-symmetric-key-encryption-data-security-aes/" data-a2a-title="SQL Server: Encrypt Column data using Symmetric Key Encryption"></a></p><p>The Database Security is a very common and one of the major aspects for DBA to keep data secure.<br />
If you don&#8217;t know about SQL Server TDE, please read below article which uses for data encryption in SQL Server.</p>
<blockquote class="wp-embedded-content" data-secret="qNqZwgAndj"><p><a href="https://www.dbrnd.com/2016/05/sql-server-transparent-data-encryption-tde-to-encrypt-a-database-data-log-backup-file/">SQL Server: Transparent Data Encryption (TDE) to Encrypt a Database</a></p></blockquote>
<p><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  src="https://www.dbrnd.com/2016/05/sql-server-transparent-data-encryption-tde-to-encrypt-a-database-data-log-backup-file/embed/#?secret=qNqZwgAndj" data-secret="qNqZwgAndj" width="600" height="338" title="&#8220;SQL Server: Transparent Data Encryption (TDE) to Encrypt a Database&#8221; &#8212; Database Research &amp; Development" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p>There are different ways to encrypt your data like TDE, data masking, symmetric key.</p>
<p>In this post, I am sharing a demonstration on how to encrypt your table column using Symmetric key encryption.<br />
For example, When you are storing customer&#8217;s credit card information, you must encrypt all cards related columns.</p>
<p><strong>Below is a full demonstration of this:</strong></p>
<p><strong>Create a table with sample data:</strong></p><pre class="crayon-plain-tag">CREATE TABLE dbo.tbl_CustomerCards
(
	CustID INT PRIMARY KEY
	,CustName VARCHAR(10)
	,CustCardNo CHAR(8)
)
GO
INSERT INTO dbo.tbl_CustomerCards VALUES
(1,'Anvesh','25-85-96'),(2,'Neevan','88-26-19')
,(3,'Roy','29-30-32'),(4,'Muskan','36-22-69')
,(5,'Martin','26-88-66'),(6,'Jenny','74-21-31')
GO</pre><p>
<strong>Create your master key and give password base on windows policy:</strong></p><pre class="crayon-plain-tag">CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Dbrnd888';
GO


--If your password does not match windows policy, you will get a below error.
Msg 15118, Level 16, State 1, Line 1
Password validation failed. The password does not meet Windows policy requirements because it is not complex enough.</pre><p>
<strong>Create a database certificate which is protected by database master key:</strong></p><pre class="crayon-plain-tag">CREATE CERTIFICATE dbrnd_certificate
WITH SUBJECT = 'dbrnd Data';
GO</pre><p>
<strong>Create a symmetric key which uses for encryption/decryption:</strong><br />
I used AES_256 algorithm.</p><pre class="crayon-plain-tag">CREATE SYMMETRIC KEY dbrnd_Symmetric_key
WITH ALGORITHM = AES_256 
ENCRYPTION BY CERTIFICATE dbrnd_certificate;
GO</pre><p>
<strong>Add one more column in a table:</strong></p><pre class="crayon-plain-tag">ALTER TABLE tbl_CustomerCards 
ADD CustCardNo_encrypt VARBINARY(MAX) 
GO</pre><p>
<strong>Open a symmetric key for further use:</strong></p><pre class="crayon-plain-tag">OPEN SYMMETRIC KEY dbrnd_Symmetric_key
DECRYPTION BY CERTIFICATE dbrnd_certificate;
GO</pre><p>
<strong>Update newly created column by generating encrypted data with use of old column:</strong></p><pre class="crayon-plain-tag">UPDATE tbl_CustomerCards
SET CustCardNo_encrypt = EncryptByKey (Key_GUID('dbrnd_Symmetric_key'),CustCardNo)
FROM tbl_CustomerCards
GO</pre><p>
<strong>Now, You can remove your old column:</strong></p><pre class="crayon-plain-tag">ALTER TABLE tbl_CustomerCards
DROP COLUMN CustCardNo;
GO</pre><p>
<strong>SELECT encrypted/decrypted card numbers:</strong></p><pre class="crayon-plain-tag">SELECT CustID, CustCardNo_encrypt AS 'Encrypted_CardNumber',
CONVERT(varchar, DecryptByKey(CustCardNo_encrypt)) AS 'Decrypted_CardNumber'
FROM dbo.tbl_CustomerCards;</pre><p>
<strong>Try to Insert few records with encrypted card number values:</strong></p><pre class="crayon-plain-tag">INSERT INTO dbo.tbl_CustomerCards VALUES
(7,'Meera',EncryptByKey( Key_GUID('dbrnd_Symmetric_key'), CONVERT(varchar,'66-52-36')))
,(8,'Laria',EncryptByKey( Key_GUID('dbrnd_Symmetric_key'), CONVERT(varchar,'99-36-23')))
GO</pre><p>
<strong>Once you complete with the use symmetric key, CLOSE it:</strong></p><pre class="crayon-plain-tag">CLOSE SYMMETRIC KEY dbrnd_Symmetric_key;
GO</pre><p>
<strong>The result:</strong></p>
<p><img fetchpriority="high" decoding="async" class="alignnone wp-image-5044 size-full" title="SQL Server Column Encrypted Result" src="https://www.dbrnd.com/wp-content/uploads/2017/04/SQLServerColumnEncryptedResult.png" alt="SQL Server Column Encrypted Result" width="554" height="179" srcset="https://www.dbrnd.com/wp-content/uploads/2017/04/SQLServerColumnEncryptedResult.png 554w, https://www.dbrnd.com/wp-content/uploads/2017/04/SQLServerColumnEncryptedResult-300x97.png 300w, https://www.dbrnd.com/wp-content/uploads/2017/04/SQLServerColumnEncryptedResult-150x48.png 150w" sizes="(max-width: 554px) 100vw, 554px" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL: Create Audit Trigger, for logging or Auditing your Database DML Transactions</title>
		<link>https://www.dbrnd.com/2017/04/postgresql-create-audit-trigger-for-logging-or-auditing-your-database-dml-transactions-insert-update-delete/</link>
					<comments>https://www.dbrnd.com/2017/04/postgresql-create-audit-trigger-for-logging-or-auditing-your-database-dml-transactions-insert-update-delete/#comments</comments>
		
		<dc:creator><![CDATA[Anvesh Patel]]></dc:creator>
		<pubDate>Wed, 05 Apr 2017 16:16:38 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Anvesh Patel]]></category>
		<category><![CDATA[Audit DELETE]]></category>
		<category><![CDATA[Audit INSERT]]></category>
		<category><![CDATA[Audit Transaction]]></category>
		<category><![CDATA[Audit Trigger]]></category>
		<category><![CDATA[Audit UPDATE]]></category>
		<category><![CDATA[Data Security]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[database research and development]]></category>
		<category><![CDATA[dbrnd]]></category>
		<category><![CDATA[Logging DML]]></category>
		<category><![CDATA[plpgsql]]></category>
		<category><![CDATA[Postgres Query]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[PostgreSQL Administrator]]></category>
		<category><![CDATA[PostgreSQL Error]]></category>
		<category><![CDATA[PostgreSQL Programming]]></category>
		<category><![CDATA[PostgreSQL Tips and Tricks]]></category>
		<guid isPermaLink="false">https://www.dbrnd.com/?p=3827</guid>

					<description><![CDATA[If you experienced with SQL Server, You might know about SQL Server Audit and Change Data Capture (CDC) functionality. As per the PostgreSQL WIKI, PostgreSQL does not have such an Inbuilt functionality for auditing your user transactions. Most of the Application requires, Database auditing like Who Inserted, When Updated kind of DML Transactions. Here, I [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2017%2F04%2Fpostgresql-create-audit-trigger-for-logging-or-auditing-your-database-dml-transactions-insert-update-delete%2F&amp;linkname=PostgreSQL%3A%20Create%20Audit%20Trigger%2C%20for%20logging%20or%20Auditing%20your%20Database%20DML%20Transactions" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2017%2F04%2Fpostgresql-create-audit-trigger-for-logging-or-auditing-your-database-dml-transactions-insert-update-delete%2F&amp;linkname=PostgreSQL%3A%20Create%20Audit%20Trigger%2C%20for%20logging%20or%20Auditing%20your%20Database%20DML%20Transactions" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2017%2F04%2Fpostgresql-create-audit-trigger-for-logging-or-auditing-your-database-dml-transactions-insert-update-delete%2F&amp;linkname=PostgreSQL%3A%20Create%20Audit%20Trigger%2C%20for%20logging%20or%20Auditing%20your%20Database%20DML%20Transactions" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_pinterest" href="https://www.addtoany.com/add_to/pinterest?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2017%2F04%2Fpostgresql-create-audit-trigger-for-logging-or-auditing-your-database-dml-transactions-insert-update-delete%2F&amp;linkname=PostgreSQL%3A%20Create%20Audit%20Trigger%2C%20for%20logging%20or%20Auditing%20your%20Database%20DML%20Transactions" title="Pinterest" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_reddit" href="https://www.addtoany.com/add_to/reddit?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2017%2F04%2Fpostgresql-create-audit-trigger-for-logging-or-auditing-your-database-dml-transactions-insert-update-delete%2F&amp;linkname=PostgreSQL%3A%20Create%20Audit%20Trigger%2C%20for%20logging%20or%20Auditing%20your%20Database%20DML%20Transactions" title="Reddit" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_pocket" href="https://www.addtoany.com/add_to/pocket?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2017%2F04%2Fpostgresql-create-audit-trigger-for-logging-or-auditing-your-database-dml-transactions-insert-update-delete%2F&amp;linkname=PostgreSQL%3A%20Create%20Audit%20Trigger%2C%20for%20logging%20or%20Auditing%20your%20Database%20DML%20Transactions" title="Pocket" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.dbrnd.com%2F2017%2F04%2Fpostgresql-create-audit-trigger-for-logging-or-auditing-your-database-dml-transactions-insert-update-delete%2F&#038;title=PostgreSQL%3A%20Create%20Audit%20Trigger%2C%20for%20logging%20or%20Auditing%20your%20Database%20DML%20Transactions" data-a2a-url="https://www.dbrnd.com/2017/04/postgresql-create-audit-trigger-for-logging-or-auditing-your-database-dml-transactions-insert-update-delete/" data-a2a-title="PostgreSQL: Create Audit Trigger, for logging or Auditing your Database DML Transactions"></a></p><p>If you experienced with SQL Server, You might know about SQL Server Audit and Change Data Capture (CDC) functionality.<br />
As per the PostgreSQL WIKI, PostgreSQL does not have such an Inbuilt functionality for auditing your user transactions. </p>
<blockquote><p>Most of the Application requires, Database auditing like Who Inserted, When Updated kind of DML Transactions.<br />
Here, I am sharing one demonstration about Trigger Approach, which is not always good, but for specific requirement, we can go with this approach. </p></blockquote>
<p>I have created separate schema and table to log about DML transactions.<br />
PostgreSQL Database Administrator can use this trigger for security purpose also. </p>
<p><strong>Create a one new Schema:</strong></p>
<pre class="crayon-plain-tag">CREATE SCHEMA AuditTable;</pre> </p>
<p><strong>Create a new table for Logged Transaction:</strong></p>
<pre class="crayon-plain-tag">CREATE TABLE AuditTable.tbl_LoggedTransactions 
(
	SchemaName CHARACTER VARYING
	,TableName CHARACTER VARYING
	,UserName CHARACTER VARYING    
	,DMLAction CHARACTER VARYING
	,OriginalData TEXT
	,ExecutedNewData TEXT
	,ExecutedSQL TEXT
	,RecordDateTime TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW()
);</pre> </p>
<p><strong>Revoke all access of newly creatd table from PUBLIC: </strong></p>
<pre class="crayon-plain-tag">REVOKE ALL ON AuditTable.tbl_LoggedTransactions FROM public;</pre> </p>
<p><strong>Create one trigger function for auditing DML transactions:<br />
</strong></p>
<pre class="crayon-plain-tag">CREATE OR REPLACE FUNCTION AuditTable.trg_AuditDML() 
RETURNS TRIGGER 
AS $BODY$
DECLARE
    OldData TEXT;
    NewData TEXT;
BEGIN 
 
    IF (TG_OP = 'UPDATE') THEN
        OldData := ROW(OLD.*);
        NewData := ROW(NEW.*);
        INSERT INTO AuditTable.tbl_LoggedTransactions 
	(
		SchemaName
		,TableName
		,UserName
		,DMLAction
		,OriginalData
		,ExecutedNewData
		,ExecutedSQL
	) 
        VALUES 
	(
		TG_TABLE_SCHEMA::TEXT
		,TG_TABLE_NAME::TEXT
		,session_user::TEXT
		,substring(TG_OP,1,1)
		,OldData
		,NewData
		,current_query()
	);
        RETURN NEW;
    ELSIF (TG_OP = 'DELETE') THEN
        OldData := ROW(OLD.*);
        INSERT INTO AuditTable.tbl_LoggedTransactions 
	(
		SchemaName
		,TableName
		,UserName
		,DMLAction
		,OriginalData
		,ExecutedSQL
	)
        VALUES 
	(
		TG_TABLE_SCHEMA::TEXT
		,TG_TABLE_NAME::TEXT
		,session_user::TEXT
		,substring(TG_OP,1,1)
		,OldData
		,current_query()
	);
        RETURN OLD;
    ELSIF (TG_OP = 'INSERT') THEN
        NewData := ROW(NEW.*);
        INSERT INTO AuditTable.tbl_LoggedTransactions 
	(
		SchemaName
		,TableName
		,UserName
		,DMLAction
		,ExecutedNewData
		,ExecutedSQL
	)
        VALUES 
	(
		TG_TABLE_SCHEMA::TEXT
		,TG_TABLE_NAME::TEXT
		,session_user::TEXT
		,substring(TG_OP,1,1)
		,NewData
		,current_query()
	);
        RETURN NEW;
    ELSE
        RAISE WARNING '[AuditTable.trg_AuditDML] - Other action occurred: %, at %',TG_OP,now();
        RETURN NULL;
    END IF;
END;
$BODY$
LANGUAGE plpgsql;</pre> </p>
<p><strong>Create a sample table:<br />
</strong></p><pre class="crayon-plain-tag">CREATE TABLE public.tbl_Employees
(
	EmpID INT
	,EmpName CHARACTER VARYING 
);</pre><p> </p>
<p><strong>Create trigger on tbl_Employees with the use of trigger function AuditTable.trg_AuditDML:<br />
</strong></p>
<pre class="crayon-plain-tag">CREATE TRIGGER trg_tbl_Employees_INSERT_UPDATE_DELETE
AFTER INSERT OR UPDATE OR DELETE ON public.tbl_Employees
FOR EACH ROW EXECUTE PROCEDURE AuditTable.trg_AuditDML();</pre> </p>
<p><strong>Execute few sample DMLs:</strong></p>
<pre class="crayon-plain-tag">INSERT INTO tbl_Employees VALUES 
(1,'Anvesh'),(2,'Martin'),(3,'Roy')
,(4,'Jeeny'),(5,'Kavita'),(6,'Neevan');

UPDATE tbl_Employees SET EmpName='Mahi'
WHERE EmpID = 5;

DELETE FROM tbl_Employees WHERE EmpID = 4;</pre> </p>
<p><strong>Check AuditTable.tbl_LoggedTransactions table for logged DML transaction:<br />
</strong></p>
<pre class="crayon-plain-tag">SELECT *FROM AuditTable.tbl_LoggedTransactions;</pre> </p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbrnd.com/2017/04/postgresql-create-audit-trigger-for-logging-or-auditing-your-database-dml-transactions-insert-update-delete/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Database Theory: What is a Data Masking ?</title>
		<link>https://www.dbrnd.com/2015/11/database-theory-what-is-a-data-masking-2/</link>
					<comments>https://www.dbrnd.com/2015/11/database-theory-what-is-a-data-masking-2/#comments</comments>
		
		<dc:creator><![CDATA[Anvesh Patel]]></dc:creator>
		<pubDate>Mon, 30 Nov 2015 16:08:47 +0000</pubDate>
				<category><![CDATA[Database Theory]]></category>
		<category><![CDATA[Anvesh Patel]]></category>
		<category><![CDATA[Data Masking]]></category>
		<category><![CDATA[Data Security]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[database concept]]></category>
		<category><![CDATA[database research and development]]></category>
		<category><![CDATA[database standards]]></category>
		<category><![CDATA[database topic]]></category>
		<category><![CDATA[dbrnd]]></category>
		<category><![CDATA[RDBMS]]></category>
		<guid isPermaLink="false">https://www.dbrnd.com/?p=1110</guid>

					<description><![CDATA[In this post, I am sharing an easy note on what is a Data Masking and why it is necessary for the data security. What is Data Masking? The Data masking is a kind of mask over the important data. Means, the format of data remains the same, and only the values are changed. This [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2015%2F11%2Fdatabase-theory-what-is-a-data-masking-2%2F&amp;linkname=Database%20Theory%3A%20What%20is%20a%20Data%20Masking%20%3F" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2015%2F11%2Fdatabase-theory-what-is-a-data-masking-2%2F&amp;linkname=Database%20Theory%3A%20What%20is%20a%20Data%20Masking%20%3F" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2015%2F11%2Fdatabase-theory-what-is-a-data-masking-2%2F&amp;linkname=Database%20Theory%3A%20What%20is%20a%20Data%20Masking%20%3F" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_pinterest" href="https://www.addtoany.com/add_to/pinterest?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2015%2F11%2Fdatabase-theory-what-is-a-data-masking-2%2F&amp;linkname=Database%20Theory%3A%20What%20is%20a%20Data%20Masking%20%3F" title="Pinterest" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_reddit" href="https://www.addtoany.com/add_to/reddit?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2015%2F11%2Fdatabase-theory-what-is-a-data-masking-2%2F&amp;linkname=Database%20Theory%3A%20What%20is%20a%20Data%20Masking%20%3F" title="Reddit" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_pocket" href="https://www.addtoany.com/add_to/pocket?linkurl=https%3A%2F%2Fwww.dbrnd.com%2F2015%2F11%2Fdatabase-theory-what-is-a-data-masking-2%2F&amp;linkname=Database%20Theory%3A%20What%20is%20a%20Data%20Masking%20%3F" title="Pocket" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.dbrnd.com%2F2015%2F11%2Fdatabase-theory-what-is-a-data-masking-2%2F&#038;title=Database%20Theory%3A%20What%20is%20a%20Data%20Masking%20%3F" data-a2a-url="https://www.dbrnd.com/2015/11/database-theory-what-is-a-data-masking-2/" data-a2a-title="Database Theory: What is a Data Masking ?"></a></p><p>In this post, I am sharing an easy note on what is a Data Masking and why it is necessary for the data security.</p>
<p><strong>What is Data Masking?</strong></p>
<blockquote><p>The Data masking is a kind of mask over the important data. Means, the format of data remains the same, and only the values are changed.<br />
This process is not for all kinds of data or tables, but the organization can select important data like Credit Card Number and perform Data Masking on the sensitive information.
</p></blockquote>
<blockquote><p>In this masking process, the structure remains similar and only information will change. We are not going to change data type of<br />
the column or field and we just change the value of that column of field.</p></blockquote>
<p><strong>In another term, we can say data masking is a process for creating different versions of sensitive data.</strong></p>
<p>Some organization requires Data Masking on those data which are<br />
needed for the testing team as a sample data so that software developer or tester team cannot access actual sensitive data.</p>
<blockquote><p>In Data Masking, You can create, replicate column or you can change the version of data before displaying to the user.<br />
There are many techniques you can choose to perform Data Masking like Substitution, Shuffling, Encryption.</p></blockquote>
<p><em>For more theory and practical you can visit this articles.</em><br />
<a href="https://en.wikipedia.org/wiki/Data_masking" target="_blank">https://en.wikipedia.org/wiki/Data_masking</a><br />
<a href="https://www.mssqltips.com/sqlservertip/3091/masking-personal-identifiable-sql-server-data/" target="_blank">https://www.mssqltips.com/sqlservertip/3091/masking-personal-identifiable-sql-server-data/</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbrnd.com/2015/11/database-theory-what-is-a-data-masking-2/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
	</channel>
</rss>
