<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic How Qlik Sense Management Console Auditing Works? in Archived Groups</title>
    <link>https://community.qlik.com/t5/Archived-Groups/How-Qlik-Sense-Management-Console-Auditing-Works/m-p/1773685#M3156</link>
    <description>&lt;P&gt;Hello everyone,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Can someone explain how QMC&amp;gt;Audit section works? I mean is it querying aganist to postgresql to get authorization infos?&lt;BR /&gt;If yes is it available to get that query?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;We want to audit authorization user by user to see who is granted on which stream/data conn. etc. and export it to excel.&lt;/P&gt;&lt;P&gt;I just gathered an app,&amp;nbsp; parsed rows from SystemRule table on QSR and able to get this info. but i want to know if there is a better way to do this and how it works :)?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Have a nice day!&lt;/P&gt;</description>
    <pubDate>Tue, 22 Jul 2025 18:19:11 GMT</pubDate>
    <dc:creator>BTIZAG_OA</dc:creator>
    <dc:date>2025-07-22T18:19:11Z</dc:date>
    <item>
      <title>How Qlik Sense Management Console Auditing Works?</title>
      <link>https://community.qlik.com/t5/Archived-Groups/How-Qlik-Sense-Management-Console-Auditing-Works/m-p/1773685#M3156</link>
      <description>&lt;P&gt;Hello everyone,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Can someone explain how QMC&amp;gt;Audit section works? I mean is it querying aganist to postgresql to get authorization infos?&lt;BR /&gt;If yes is it available to get that query?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;We want to audit authorization user by user to see who is granted on which stream/data conn. etc. and export it to excel.&lt;/P&gt;&lt;P&gt;I just gathered an app,&amp;nbsp; parsed rows from SystemRule table on QSR and able to get this info. but i want to know if there is a better way to do this and how it works :)?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Have a nice day!&lt;/P&gt;</description>
      <pubDate>Tue, 22 Jul 2025 18:19:11 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Archived-Groups/How-Qlik-Sense-Management-Console-Auditing-Works/m-p/1773685#M3156</guid>
      <dc:creator>BTIZAG_OA</dc:creator>
      <dc:date>2025-07-22T18:19:11Z</dc:date>
    </item>
    <item>
      <title>Re: How Qlik Sense Management Console Auditing Works?</title>
      <link>https://community.qlik.com/t5/Archived-Groups/How-Qlik-Sense-Management-Console-Auditing-Works/m-p/1776739#M3157</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://community.qlik.com/t5/user/viewprofilepage/user-id/87846"&gt;@BTIZAG_OA&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;P&gt;Hello everyone,&lt;/P&gt;&lt;P&gt;Can someone explain how QMC&amp;gt;Audit section works? I mean is it querying aganist to postgresql to get authorization infos?&lt;BR /&gt;If yes is it available to get that query?&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;BR /&gt;Not really. The PostgreSQL layer is used, but it's not going to be useful for your analysis. At the PostgreSQL layer, it'll just be a list of rules that are involved. Let's take an example rule&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Filter: Stream_82379606-4c87-4798-8eb7-fb84973b77f0&lt;/LI&gt;&lt;LI&gt;Actions: Read&lt;/LI&gt;&lt;LI&gt;Conditions: ((user.group = "Example Group 1"))&lt;/LI&gt;&lt;LI&gt;Context: Hub&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;That's exactly what would be stored in PostgreSQL.&lt;/P&gt;&lt;P&gt;The&amp;nbsp;&lt;EM&gt;audit&lt;/EM&gt; performs an inventory of the assets (e.g. apps, streams, etc) and then evaluates all relevant rules for all selected users to see who&amp;nbsp;&lt;EM&gt;could&lt;/EM&gt; access the asset. This counter-factual analysis is not stored in the PostgreSQL layer and is done on demand when performing the audit.&lt;/P&gt;&lt;P&gt;As for something more programmatically, unfortunately I am not aware of anything ready made for this purpose. You can query the relevant QRS API endpoints, but in the interest of full disclosure they are complex.&lt;/P&gt;&lt;P&gt;I took a stab at building something a while ago and came up with this using Qlik-Cli-Windows (&lt;A href="https://github.com/ahaydon/Qlik-Cli-Windows" target="_blank"&gt;https://github.com/ahaydon/Qlik-Cli-Windows&lt;/A&gt;&lt;span class="lia-unicode-emoji" title=":disappointed_face:"&gt;😞&lt;/span&gt;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;$auditStreams = $true
$auditApps = $true
$auditDataConnections = $true


Connect-Qlik

# Get the Archived Logs folder
$rootFolder = (Get-QlikServiceCluster -full).settings.sharedPersistenceProperties.archivedLogsRootFolder

# Check for the store folder, create if needed
$storeDir = $rootFolder + '\qs-security-audit-csv'
if (!(Test-Path $storeDir)){
    Set-Location $rootFolder
    New-Item -path $storeDir -type directory | Out-Null
}

if ($auditStreams -eq $true){
    $streamAuditBody = '{"resourceType":"Stream","resourceRef":{},"subjectRef":{"resourceFilter":""},"actions":2,"environmentAttributes":"context=AppAccess;","subjectProperties":["id","name","userId","userDirectory"],"auditLimit":100000,"outputObjectsPrivileges":4,"resourceProperties":["name"]}'
    $streamAudit = Invoke-QlikPost -path /qrs/systemrule/security/audit/matrix -body $streamAuditBody
    $streamAudit.matrix | Export-Csv -path "$($rootFolder)\qs-security-audit-csv\streamsAudit.csv" -NoTypeInformation
    $streams = Get-QlikStream
    $streams | Export-Csv -path "$($rootFolder)\qs-security-audit-csv\streams.csv" -NoTypeInformation
}


if ($auditApps-eq $true){
    $appAuditBody = '{"resourceType":"App","resourceRef":{},"subjectRef":{"resourceFilter":""},"actions":2,"environmentAttributes":"context=AppAccess;","subjectProperties":["id","name","userId","userDirectory"],"auditLimit":100000,"outputObjectsPrivileges":4,"resourceProperties":["name"]}'
    $appAudit = Invoke-QlikPost -path /qrs/systemrule/security/audit/matrix -body $appAuditBody
    $appAudit.matrix | Export-Csv -path "$($rootFolder)\qs-security-audit-csv\appsAudit.csv" -NoTypeInformation
    $apps = Get-QlikApp
    $apps | Export-Csv -path "$($rootFolder)\qs-security-audit-csv\apps.csv" -NoTypeInformation
}

if ($auditDataConnections-eq $true){
    $dataConnectionAuditBody = '{"resourceType":"DataConnection","resourceRef":{},"subjectRef":{"resourceFilter":""},"actions":2,"environmentAttributes":"context=AppAccess;","subjectProperties":["id","name","userId","userDirectory"],"auditLimit":100000,"outputObjectsPrivileges":4,"resourceProperties":["name"]}'
    $dataConnectionAudit = Invoke-QlikPost -path /qrs/systemrule/security/audit/matrix -body $dataConnectionAuditBody
    $dataConnectionAudit.matrix | Export-Csv -path "$($rootFolder)\qs-security-audit-csv\dataConnectionsAudit.csv" -NoTypeInformation
    $dataConnections = Get-QlikDataConnection
    $dataConnections | Export-Csv -path "$($rootFolder)\qs-security-audit-csv\dataConnections.csv" -NoTypeInformation
}

$user = Get-QlikUser
$user | Export-Csv -path "$($rootFolder)\qs-security-audit-csv\users.csv" -NoTypeInformation&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;The action value of 2 is the action of read. It's on my to-do to make it more dynamic on the actions and load test it since doing this operation is expensive for the Repository Service.&lt;/P&gt;</description>
      <pubDate>Fri, 22 Jan 2021 14:26:44 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Archived-Groups/How-Qlik-Sense-Management-Console-Auditing-Works/m-p/1776739#M3157</guid>
      <dc:creator>Levi_Turner</dc:creator>
      <dc:date>2021-01-22T14:26:44Z</dc:date>
    </item>
  </channel>
</rss>

