deploying docs: feat: support server-side sessions (#25795) (apache/superset@d2f511abba5240c137405267e0ebe30b9e3504d4)
diff --git a/404.html b/404.html
index 41eec1b..6b8606c 100644
--- a/404.html
+++ b/404.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/assets/js/30ec1363.6180b023.js b/assets/js/30ec1363.6180b023.js
deleted file mode 100644
index 41301b0..0000000
--- a/assets/js/30ec1363.6180b023.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[4745],{84086:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var n=a(83117),s=(a(67294),a(3905));const i={title:"Security",hide_title:!0,sidebar_position:1},r=void 0,o={unversionedId:"security/security",id:"security/security",title:"Security",description:"Security in Superset is handled by Flask AppBuilder (FAB), an application development framework",source:"@site/docs/security/security.mdx",sourceDirName:"security",slug:"/security/",permalink:"/docs/security/",draft:!1,editUrl:"https://github.com/apache/superset/tree/master/docs/docs/security/security.mdx",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Security",hide_title:!0,sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"API",permalink:"/docs/api"},next:{title:"CVEs by release",permalink:"/docs/security/cves"}},l={},p=[{value:"Provided Roles",id:"provided-roles",level:3},{value:"Admin",id:"admin",level:3},{value:"Alpha",id:"alpha",level:3},{value:"Gamma",id:"gamma",level:3},{value:"sql_lab",id:"sql_lab",level:3},{value:"Public",id:"public",level:3},{value:"Managing Data Source Access for Gamma Roles",id:"managing-data-source-access-for-gamma-roles",level:3},{value:"REST API for user &amp; role management",id:"rest-api-for-user--role-management",level:3},{value:"Customizing Permissions",id:"customizing-permissions",level:3},{value:"Permissions",id:"permissions",level:3},{value:"Restricting Access to a Subset of Data Sources",id:"restricting-access-to-a-subset-of-data-sources",level:3},{value:"Row Level Security",id:"row-level-security",level:3},{value:"User Sessions",id:"user-sessions",level:3},{value:"Content Security Policy (CSP)",id:"content-security-policy-csp",level:3},{value:"CSP Requirements",id:"csp-requirements",level:4},{value:"Other Talisman security considerations",id:"other-talisman-security-considerations",level:4},{value:"Reporting Security Vulnerabilities",id:"reporting-security-vulnerabilities",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...a}=e;return(0,s.kt)(u,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"Security in Superset is handled by Flask AppBuilder (FAB), an application development framework\nbuilt on top of Flask. FAB provides authentication, user management, permissions and roles.\nPlease read its ",(0,s.kt)("a",{parentName:"p",href:"https://flask-appbuilder.readthedocs.io/en/latest/security.html"},"Security documentation"),"."),(0,s.kt)("h3",{id:"provided-roles"},"Provided Roles"),(0,s.kt)("p",null,"Superset ships with a set of roles that are handled by Superset itself. You can assume\nthat these roles will stay up-to-date as Superset evolves (and as you update Superset versions)."),(0,s.kt)("p",null,"Even though ",(0,s.kt)("strong",{parentName:"p"},"Admin")," users have the ability, we don't recommend altering the\npermissions associated with each role (e.g. by removing or adding permissions to them). The permissions\nassociated with each role will be re-synchronized to their original values when you run\nthe ",(0,s.kt)("strong",{parentName:"p"},"superset init")," command (often done between Superset versions)."),(0,s.kt)("p",null,"A table with the permissions for these roles can be found at ",(0,s.kt)("a",{parentName:"p",href:"https://github.com/apache/superset/blob/master/RESOURCES/STANDARD_ROLES.md"},"/RESOURCES/STANDARD_ROLES.md"),"."),(0,s.kt)("h3",{id:"admin"},"Admin"),(0,s.kt)("p",null,"Admins have all possible rights, including granting or revoking rights from other\nusers and altering other people\u2019s slices and dashboards."),(0,s.kt)("h3",{id:"alpha"},"Alpha"),(0,s.kt)("p",null,"Alpha users have access to all data sources, but they cannot grant or revoke access\nfrom other users. They are also limited to altering the objects that they own. Alpha users can add and alter data sources."),(0,s.kt)("h3",{id:"gamma"},"Gamma"),(0,s.kt)("p",null,"Gamma users have limited access. They can only consume data coming from data sources\nthey have been given access to through another complementary role. They only have access to\nview the slices and dashboards made from data sources that they have access to. Currently Gamma\nusers are not able to alter or add data sources. We assume that they are mostly content consumers, though they can create slices and dashboards."),(0,s.kt)("p",null,"Also note that when Gamma users look at the dashboards and slices list view, they will\nonly see the objects that they have access to."),(0,s.kt)("h3",{id:"sql_lab"},"sql_lab"),(0,s.kt)("p",null,"The ",(0,s.kt)("strong",{parentName:"p"},"sql_lab")," role grants access to SQL Lab. Note that while ",(0,s.kt)("strong",{parentName:"p"},"Admin")," users have access\nto all databases by default, both ",(0,s.kt)("strong",{parentName:"p"},"Alpha")," and ",(0,s.kt)("strong",{parentName:"p"},"Gamma")," users need to be given access on a per database basis."),(0,s.kt)("h3",{id:"public"},"Public"),(0,s.kt)("p",null,"To allow logged-out users to access some Superset features, you can use the ",(0,s.kt)("inlineCode",{parentName:"p"},"PUBLIC_ROLE_LIKE")," config setting and assign it to another role whose permissions you want passed to this role."),(0,s.kt)("p",null,"For example, by setting ",(0,s.kt)("inlineCode",{parentName:"p"},'PUBLIC_ROLE_LIKE = "Gamma"')," in your ",(0,s.kt)("inlineCode",{parentName:"p"},"superset_config.py")," file, you grant\npublic role the same set of permissions as for the ",(0,s.kt)("strong",{parentName:"p"},"Gamma")," role. This is useful if one\nwants to enable anonymous users to view dashboards. Explicit grant on specific datasets is\nstill required, meaning that you need to edit the ",(0,s.kt)("strong",{parentName:"p"},"Public")," role and add the public data sources to the role manually."),(0,s.kt)("h3",{id:"managing-data-source-access-for-gamma-roles"},"Managing Data Source Access for Gamma Roles"),(0,s.kt)("p",null,"Here\u2019s how to provide users access to only specific datasets. First make sure the users with\nlimited access have ","[only]"," the Gamma role assigned to them. Second, create a new role (Menu -> Security -> List Roles) and click the + sign."),(0,s.kt)("p",null,"This new window allows you to give this new role a name, attribute it to users and select the\ntables in the ",(0,s.kt)("strong",{parentName:"p"},"Permissions")," dropdown. To select the data sources you want to associate with this role, simply click on the dropdown and use the typeahead to search for your table names."),(0,s.kt)("p",null,"You can then confirm with users assigned to the ",(0,s.kt)("strong",{parentName:"p"},"Gamma")," role that they see the\nobjects (dashboards and slices) associated with the tables you just extended them."),(0,s.kt)("h3",{id:"rest-api-for-user--role-management"},"REST API for user & role management"),(0,s.kt)("p",null,"Flask-AppBuilder supports a REST API for user CRUD, but this feature is in beta and is not enabled by default in Superset.  To enable this feature, set the following in your Superset configuration:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-python"},"FAB_ADD_SECURITY_API = True\n")),(0,s.kt)("p",null,'Once configured, the documentation for additional "Security" endpoints will be visible in Swagger for you to explore.'),(0,s.kt)("h3",{id:"customizing-permissions"},"Customizing Permissions"),(0,s.kt)("p",null,"The permissions exposed by FAB are very granular and allow for a great level of\ncustomization. FAB creates many permissions automatically for each model that is\ncreated (can_add, can_delete, can_show, can_edit, \u2026) as well as for each view.\nOn top of that, Superset can expose more granular permissions like ",(0,s.kt)("strong",{parentName:"p"},"all_datasource_access"),"."),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"We do not recommend altering the 3 base roles as there are a set of assumptions that\nSuperset is built upon"),". It is possible though for you to create your own roles, and union them to existing ones."),(0,s.kt)("h3",{id:"permissions"},"Permissions"),(0,s.kt)("p",null,"Roles are composed of a set of permissions, and Superset has many categories of\npermissions. Here are the different categories of permissions:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"Model & Action: models are entities like Dashboard, Slice, or User. Each model has\na fixed set of permissions, like ",(0,s.kt)("strong",{parentName:"li"},"can_edit"),", ",(0,s.kt)("strong",{parentName:"li"},"can_show"),", ",(0,s.kt)("strong",{parentName:"li"},"can_delete"),", ",(0,s.kt)("strong",{parentName:"li"},"can_list"),", ",(0,s.kt)("strong",{parentName:"li"},"can_add"),",\nand so on. For example, you can allow a user to delete dashboards by adding ",(0,s.kt)("strong",{parentName:"li"},"can_delete")," on\nDashboard entity to a role and granting this user that role."),(0,s.kt)("li",{parentName:"ul"},"Views: views are individual web pages, like the Explore view or the SQL Lab view.\nWhen granted to a user, they will see that view in its menu items, and be able to load that page."),(0,s.kt)("li",{parentName:"ul"},"Data source: For each data source, a permission is created. If the user does not have the\n",(0,s.kt)("inlineCode",{parentName:"li"},"all_datasource_access permission")," granted, the user will only be able to see Slices or explore the data sources that are granted to them"),(0,s.kt)("li",{parentName:"ul"},"Database: Granting access to a database allows for the user to access all\ndata sources within that database, and will enable the user to query that\ndatabase in SQL Lab, provided that the SQL Lab specific permission have been granted to the user")),(0,s.kt)("h3",{id:"restricting-access-to-a-subset-of-data-sources"},"Restricting Access to a Subset of Data Sources"),(0,s.kt)("p",null,"We recommend giving a user the ",(0,s.kt)("strong",{parentName:"p"},"Gamma")," role plus any other roles that would add\naccess to specific data sources. We recommend that you create individual roles for\neach access profile. For example, the users on the Finance team might have access to a set of\ndatabases and data sources; these permissions can be consolidated in a single role.\nUsers with this profile then need to be assigned the ",(0,s.kt)("strong",{parentName:"p"},"Gamma")," role as a foundation to\nthe models and views they can access, and that Finance role that is a collection of permissions to data objects."),(0,s.kt)("p",null,"A user can have multiple roles associated with them. For example, an executive on the Finance\nteam could be granted ",(0,s.kt)("strong",{parentName:"p"},"Gamma"),", ",(0,s.kt)("strong",{parentName:"p"},"Finance"),", and the ",(0,s.kt)("strong",{parentName:"p"},"Executive")," roles. The ",(0,s.kt)("strong",{parentName:"p"},"Executive"),"\nrole could provide access to a set of data sources and dashboards made available only to executives.\nIn the ",(0,s.kt)("strong",{parentName:"p"},"Dashboards")," view, a user can only see the ones they have access too\nbased on the roles and permissions that were attributed."),(0,s.kt)("h3",{id:"row-level-security"},"Row Level Security"),(0,s.kt)("p",null,"Using Row Level Security filters (under the ",(0,s.kt)("strong",{parentName:"p"},"Security")," menu) you can create filters\nthat are assigned to a particular table, as well as a set of roles.\nIf you want members of the Finance team to only have access to\nrows where ",(0,s.kt)("inlineCode",{parentName:"p"},'department = "finance"'),", you could:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"Create a Row Level Security filter with that clause (",(0,s.kt)("inlineCode",{parentName:"li"},'department = "finance"'),")"),(0,s.kt)("li",{parentName:"ul"},"Then assign the clause to the ",(0,s.kt)("strong",{parentName:"li"},"Finance")," role and the table it applies to")),(0,s.kt)("p",null,"The ",(0,s.kt)("strong",{parentName:"p"},"clause")," field, which can contain arbitrary text, is then added to the generated\nSQL statement\u2019s WHERE clause. So you could even do something like create a filter\nfor the last 30 days and apply it to a specific role, with a clause\nlike ",(0,s.kt)("inlineCode",{parentName:"p"},"date_field > DATE_SUB(NOW(), INTERVAL 30 DAY)"),". It can also support\nmultiple conditions: ",(0,s.kt)("inlineCode",{parentName:"p"},"client_id = 6")," AND ",(0,s.kt)("inlineCode",{parentName:"p"},'advertiser="foo"'),", etc."),(0,s.kt)("p",null,"All relevant Row level security filters will be combined together (under the hood,\nthe different SQL clauses are combined using AND statements). This means it's\npossible to create a situation where two roles conflict in such a way as to limit a table subset to empty."),(0,s.kt)("p",null,"For example, the filters ",(0,s.kt)("inlineCode",{parentName:"p"},"client_id=4")," and ",(0,s.kt)("inlineCode",{parentName:"p"},"client_id=5"),", applied to a role,\nwill result in users of that role having ",(0,s.kt)("inlineCode",{parentName:"p"},"client_id=4")," AND ",(0,s.kt)("inlineCode",{parentName:"p"},"client_id=5"),"\nadded to their query, which can never be true."),(0,s.kt)("h3",{id:"user-sessions"},"User Sessions"),(0,s.kt)("p",null,"Superset uses ",(0,s.kt)("a",{parentName:"p",href:"https://pypi.org/project/Flask/"},"Flask"),"\nand ",(0,s.kt)("a",{parentName:"p",href:"https://pypi.org/project/Flask-Login/"},"Flask-Login")," for user session management."),(0,s.kt)("p",null,"Session cookies are used to maintain session info and user state between requests,\nalthough they do not contain personal user information they serve the purpose of identifying\na user session on the server side.\nThe session cookie is encrypted with the application ",(0,s.kt)("inlineCode",{parentName:"p"},"SECRET_KEY")," and cannot be read by the client.\nSo it's very important to keep the ",(0,s.kt)("inlineCode",{parentName:"p"},"SECRET_KEY")," secret and set to a secure unique complex random value."),(0,s.kt)("p",null,"Flask and Flask-Login offer a number of configuration options to control session behavior."),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"Relevant Flask settings:")),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"SESSION_COOKIE_HTTPONLY"),": (default: ",(0,s.kt)("inlineCode",{parentName:"p"},"False"),"): Controls if cookies should be set with the ",(0,s.kt)("inlineCode",{parentName:"p"},"HttpOnly")," flag."),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"SESSION_COOKIE_SECURE"),": (default: ",(0,s.kt)("inlineCode",{parentName:"p"},"False"),") Browsers will only send cookies with requests over\nHTTPS if the cookie is marked \u201csecure\u201d. The application must be served over HTTPS for this to make sense."),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"SESSION_COOKIE_SAMESITE"),': (default: "Lax") Prevents the browser from sending this cookie along with cross-site requests.'),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"PERMANENT_SESSION_LIFETIME"),': (default: "31 days") The lifetime of a permanent session as a ',(0,s.kt)("inlineCode",{parentName:"p"},"datetime.timedelta")," object."),(0,s.kt)("h3",{id:"content-security-policy-csp"},"Content Security Policy (CSP)"),(0,s.kt)("p",null,"Superset uses the ",(0,s.kt)("a",{parentName:"p",href:"https://pypi.org/project/flask-talisman/"},"Talisman")," extension to enable implementation of a\n",(0,s.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP"},"Content Security Policy (CSP)"),", an added\nlayer of security that helps to detect and mitigate certain types of attacks, including\nCross-Site Scripting (XSS) and data injection attacks."),(0,s.kt)("p",null,"A CSP makes it possible for server administrators to reduce or eliminate the vectors by which XSS can\noccur by specifying the domains that the browser should consider to be valid sources of executable scripts.\nA CSP-compatible browser will then only execute scripts loaded in source files received from those allowed domains,\nignoring all other scripts (including inline scripts and event-handling HTML attributes)."),(0,s.kt)("p",null,"A policy is described using a series of policy directives, each of which describes the policy for\na certain resource type or policy area. You can check possible directives\n",(0,s.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy"},"here"),"."),(0,s.kt)("p",null,"It's extremely important to correctly configure a Content Security Policy when deploying Superset to\nprevent many types of attacks. Superset provides two variables in ",(0,s.kt)("inlineCode",{parentName:"p"},"config.py")," for deploying a CSP:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"TALISMAN_ENABLED")," defaults to ",(0,s.kt)("inlineCode",{parentName:"li"},"True"),"; set this to ",(0,s.kt)("inlineCode",{parentName:"li"},"False")," in order to disable CSP"),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"TALISMAN_CONFIG")," holds the actual the policy definition (",(0,s.kt)("em",{parentName:"li"},"see example below"),") as well as any\nother arguments to be passed to Talisman.")),(0,s.kt)("p",null,"When running in production mode, Superset will check at startup for the presence\nof a CSP. If one is not found, it will issue a warning with the security risks. For environments\nwhere CSP policies are defined outside of Superset using other software, administrators can disable\nthis warning using the ",(0,s.kt)("inlineCode",{parentName:"p"},"CONTENT_SECURITY_POLICY_WARNING")," key in ",(0,s.kt)("inlineCode",{parentName:"p"},"config.py"),"."),(0,s.kt)("h4",{id:"csp-requirements"},"CSP Requirements"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("p",{parentName:"li"},"Superset needs the ",(0,s.kt)("inlineCode",{parentName:"p"},"style-src unsafe-inline")," CSP directive in order to operate."),(0,s.kt)("pre",{parentName:"li"},(0,s.kt)("code",{parentName:"pre"},"style-src 'self' 'unsafe-inline'\n"))),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("p",{parentName:"li"},"Only scripts marked with a ",(0,s.kt)("a",{parentName:"p",href:"https://content-security-policy.com/nonce/"},"nonce")," can be loaded and executed.\nNonce is a random string automatically generated by Talisman on each page load.\nYou can get current nonce value by calling jinja macro ",(0,s.kt)("inlineCode",{parentName:"p"},"csp_nonce()"),"."),(0,s.kt)("pre",{parentName:"li"},(0,s.kt)("code",{parentName:"pre"},'<script nonce="{{ csp_nonce() }}">\n/* my script */\n<\/script>\n')))),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("p",{parentName:"li"},"Some dashboards load images using data URIs and require ",(0,s.kt)("inlineCode",{parentName:"p"},"data:")," in their ",(0,s.kt)("inlineCode",{parentName:"p"},"img-src")),(0,s.kt)("pre",{parentName:"li"},(0,s.kt)("code",{parentName:"pre"},"img-src 'self' data:\n"))),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("p",{parentName:"li"},"MapBox charts use workers and need to connect to MapBox servers in addition to the Superset origin"),(0,s.kt)("pre",{parentName:"li"},(0,s.kt)("code",{parentName:"pre"},"worker-src 'self' blob:\nconnect-src 'self' https://api.mapbox.com https://events.mapbox.com\n")))),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"Other CSP directives default to ",(0,s.kt)("inlineCode",{parentName:"li"},"'self'")," to limit content to the same origin as the Superset server.")),(0,s.kt)("p",null,"In order to adjust provided CSP configuration to your needs, follow the instructions and examples provided in\n",(0,s.kt)("a",{parentName:"p",href:"https://content-security-policy.com/"},"Content Security Policy Reference")),(0,s.kt)("h4",{id:"other-talisman-security-considerations"},"Other Talisman security considerations"),(0,s.kt)("p",null,"Setting ",(0,s.kt)("inlineCode",{parentName:"p"},"TALISMAN_ENABLED = True")," will invoke Talisman's protection with its default arguments,\nof which ",(0,s.kt)("inlineCode",{parentName:"p"},"content_security_policy")," is only one. Those can be found in the\n",(0,s.kt)("a",{parentName:"p",href:"https://pypi.org/project/flask-talisman/"},"Talisman documentation")," under ",(0,s.kt)("em",{parentName:"p"},"Options"),".\nThese generally improve security, but administrators should be aware of their existence."),(0,s.kt)("p",null,"In particular, the option of ",(0,s.kt)("inlineCode",{parentName:"p"},"force_https = True")," (",(0,s.kt)("inlineCode",{parentName:"p"},"False")," by default) may break Superset's Alerts & Reports\nif workers are configured to access charts via a ",(0,s.kt)("inlineCode",{parentName:"p"},"WEBDRIVER_BASEURL")," beginning\nwith ",(0,s.kt)("inlineCode",{parentName:"p"},"http://"),".  As long as a Superset deployment enforces https upstream, e.g.,\nthrough a loader balancer or application gateway, it should be acceptable to keep this\noption disabled. Otherwise, you may want to enable ",(0,s.kt)("inlineCode",{parentName:"p"},"force_https")," like this:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-python"},'TALISMAN_CONFIG = {\n    "force_https": True,\n    "content_security_policy": { ...\n')),(0,s.kt)("h3",{id:"reporting-security-vulnerabilities"},"Reporting Security Vulnerabilities"),(0,s.kt)("p",null,"Apache Software Foundation takes a rigorous standpoint in annihilating the security issues in its\nsoftware projects. Apache Superset is highly sensitive and forthcoming to issues pertaining to its\nfeatures and functionality."),(0,s.kt)("p",null,"If you have apprehensions regarding Superset security or you discover vulnerability or potential\nthreat, don\u2019t hesitate to get in touch with the Apache Security Team by dropping a mail at\n",(0,s.kt)("a",{parentName:"p",href:"mailto:security@apache.org."},"security@apache.org.")," In the mail, specify the project name Superset with the description of the\nissue or potential threat. You are also urged to recommend the way to reproduce and replicate the\nissue. The security team and the Superset community will get back to you after assessing and\nanalysing the findings."),(0,s.kt)("p",null,"PLEASE PAY ATTENTION to report the security issue on the security email before disclosing it on\npublic domain. The ASF Security Team maintains a page with the description of how vulnerabilities\nand potential threats are handled, check ",(0,s.kt)("a",{parentName:"p",href:"https://apache.org/security/committers.html"},"their web page"),"\nfor more details."))}d.isMDXComponent=!0},3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(67294);function s(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){s(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,s=function(e,t){if(null==e)return{};var a,n,s={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(s[a]=e[a]);return s}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(s[a]=e[a])}return s}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var a=e.components,s=e.mdxType,i=e.originalType,l=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),u=p(a),h=s,m=u["".concat(l,".").concat(h)]||u[h]||d[h]||i;return a?n.createElement(m,r(r({ref:t},c),{},{components:a})):n.createElement(m,r({ref:t},c))}));function m(e,t){var a=arguments,s=t&&t.mdxType;if("string"==typeof e||s){var i=a.length,r=new Array(i);r[0]=h;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[u]="string"==typeof e?e:s,r[1]=o;for(var p=2;p<i;p++)r[p]=a[p];return n.createElement.apply(null,r)}return n.createElement.apply(null,a)}h.displayName="MDXCreateElement"}}]);
\ No newline at end of file
diff --git a/assets/js/30ec1363.e8758441.js b/assets/js/30ec1363.e8758441.js
new file mode 100644
index 0000000..eea44d6
--- /dev/null
+++ b/assets/js/30ec1363.e8758441.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[4745],{84086:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var n=a(83117),s=(a(67294),a(3905));const i={title:"Security",hide_title:!0,sidebar_position:1},r=void 0,o={unversionedId:"security/security",id:"security/security",title:"Security",description:"Authentication and authorization in Superset is handled by Flask AppBuilder (FAB), an application development framework",source:"@site/docs/security/security.mdx",sourceDirName:"security",slug:"/security/",permalink:"/docs/security/",draft:!1,editUrl:"https://github.com/apache/superset/tree/master/docs/docs/security/security.mdx",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Security",hide_title:!0,sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"API",permalink:"/docs/api"},next:{title:"CVEs by release",permalink:"/docs/security/cves"}},l={},p=[{value:"Provided Roles",id:"provided-roles",level:3},{value:"Admin",id:"admin",level:3},{value:"Alpha",id:"alpha",level:3},{value:"Gamma",id:"gamma",level:3},{value:"sql_lab",id:"sql_lab",level:3},{value:"Public",id:"public",level:3},{value:"Managing Data Source Access for Gamma Roles",id:"managing-data-source-access-for-gamma-roles",level:3},{value:"REST API for user &amp; role management",id:"rest-api-for-user--role-management",level:3},{value:"Customizing Permissions",id:"customizing-permissions",level:3},{value:"Permissions",id:"permissions",level:3},{value:"Restricting Access to a Subset of Data Sources",id:"restricting-access-to-a-subset-of-data-sources",level:3},{value:"Row Level Security",id:"row-level-security",level:3},{value:"User Sessions",id:"user-sessions",level:3},{value:"Switching to server side sessions",id:"switching-to-server-side-sessions",level:4},{value:"Content Security Policy (CSP)",id:"content-security-policy-csp",level:3},{value:"CSP Requirements",id:"csp-requirements",level:4},{value:"Other Talisman security considerations",id:"other-talisman-security-considerations",level:4},{value:"Reporting Security Vulnerabilities",id:"reporting-security-vulnerabilities",level:3}],c={toc:p},d="wrapper";function u(e){let{components:t,...a}=e;return(0,s.kt)(d,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"Authentication and authorization in Superset is handled by Flask AppBuilder (FAB), an application development framework\nbuilt on top of Flask. FAB provides authentication, user management, permissions and roles.\nPlease read its ",(0,s.kt)("a",{parentName:"p",href:"https://flask-appbuilder.readthedocs.io/en/latest/security.html"},"Security documentation"),"."),(0,s.kt)("h3",{id:"provided-roles"},"Provided Roles"),(0,s.kt)("p",null,"Superset ships with a set of roles that are handled by Superset itself. You can assume\nthat these roles will stay up-to-date as Superset evolves (and as you update Superset versions)."),(0,s.kt)("p",null,"Even though ",(0,s.kt)("strong",{parentName:"p"},"Admin")," users have the ability, we don't recommend altering the\npermissions associated with each role (e.g. by removing or adding permissions to them). The permissions\nassociated with each role will be re-synchronized to their original values when you run\nthe ",(0,s.kt)("strong",{parentName:"p"},"superset init")," command (often done between Superset versions)."),(0,s.kt)("p",null,"A table with the permissions for these roles can be found at ",(0,s.kt)("a",{parentName:"p",href:"https://github.com/apache/superset/blob/master/RESOURCES/STANDARD_ROLES.md"},"/RESOURCES/STANDARD_ROLES.md"),"."),(0,s.kt)("h3",{id:"admin"},"Admin"),(0,s.kt)("p",null,"Admins have all possible rights, including granting or revoking rights from other\nusers and altering other people\u2019s slices and dashboards."),(0,s.kt)("h3",{id:"alpha"},"Alpha"),(0,s.kt)("p",null,"Alpha users have access to all data sources, but they cannot grant or revoke access\nfrom other users. They are also limited to altering the objects that they own. Alpha users can add and alter data sources."),(0,s.kt)("h3",{id:"gamma"},"Gamma"),(0,s.kt)("p",null,"Gamma users have limited access. They can only consume data coming from data sources\nthey have been given access to through another complementary role. They only have access to\nview the slices and dashboards made from data sources that they have access to. Currently Gamma\nusers are not able to alter or add data sources. We assume that they are mostly content consumers, though they can create slices and dashboards."),(0,s.kt)("p",null,"Also note that when Gamma users look at the dashboards and slices list view, they will\nonly see the objects that they have access to."),(0,s.kt)("h3",{id:"sql_lab"},"sql_lab"),(0,s.kt)("p",null,"The ",(0,s.kt)("strong",{parentName:"p"},"sql_lab")," role grants access to SQL Lab. Note that while ",(0,s.kt)("strong",{parentName:"p"},"Admin")," users have access\nto all databases by default, both ",(0,s.kt)("strong",{parentName:"p"},"Alpha")," and ",(0,s.kt)("strong",{parentName:"p"},"Gamma")," users need to be given access on a per database basis."),(0,s.kt)("h3",{id:"public"},"Public"),(0,s.kt)("p",null,"To allow logged-out users to access some Superset features, you can use the ",(0,s.kt)("inlineCode",{parentName:"p"},"PUBLIC_ROLE_LIKE")," config setting and assign it to another role whose permissions you want passed to this role."),(0,s.kt)("p",null,"For example, by setting ",(0,s.kt)("inlineCode",{parentName:"p"},'PUBLIC_ROLE_LIKE = "Gamma"')," in your ",(0,s.kt)("inlineCode",{parentName:"p"},"superset_config.py")," file, you grant\npublic role the same set of permissions as for the ",(0,s.kt)("strong",{parentName:"p"},"Gamma")," role. This is useful if one\nwants to enable anonymous users to view dashboards. Explicit grant on specific datasets is\nstill required, meaning that you need to edit the ",(0,s.kt)("strong",{parentName:"p"},"Public")," role and add the public data sources to the role manually."),(0,s.kt)("h3",{id:"managing-data-source-access-for-gamma-roles"},"Managing Data Source Access for Gamma Roles"),(0,s.kt)("p",null,"Here\u2019s how to provide users access to only specific datasets. First make sure the users with\nlimited access have ","[only]"," the Gamma role assigned to them. Second, create a new role (Menu -> Security -> List Roles) and click the + sign."),(0,s.kt)("p",null,"This new window allows you to give this new role a name, attribute it to users and select the\ntables in the ",(0,s.kt)("strong",{parentName:"p"},"Permissions")," dropdown. To select the data sources you want to associate with this role, simply click on the dropdown and use the typeahead to search for your table names."),(0,s.kt)("p",null,"You can then confirm with users assigned to the ",(0,s.kt)("strong",{parentName:"p"},"Gamma")," role that they see the\nobjects (dashboards and slices) associated with the tables you just extended them."),(0,s.kt)("h3",{id:"rest-api-for-user--role-management"},"REST API for user & role management"),(0,s.kt)("p",null,"Flask-AppBuilder supports a REST API for user CRUD,\nbut this feature is in beta and is not enabled by default in Superset.\nTo enable this feature, set the following in your Superset configuration:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-python"},"FAB_ADD_SECURITY_API = True\n")),(0,s.kt)("p",null,'Once configured, the documentation for additional "Security" endpoints will be visible in Swagger for you to explore.'),(0,s.kt)("h3",{id:"customizing-permissions"},"Customizing Permissions"),(0,s.kt)("p",null,"The permissions exposed by FAB are very granular and allow for a great level of\ncustomization. FAB creates many permissions automatically for each model that is\ncreated (can_add, can_delete, can_show, can_edit, \u2026) as well as for each view.\nOn top of that, Superset can expose more granular permissions like ",(0,s.kt)("strong",{parentName:"p"},"all_datasource_access"),"."),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"We do not recommend altering the 3 base roles as there are a set of assumptions that\nSuperset is built upon"),". It is possible though for you to create your own roles, and union them to existing ones."),(0,s.kt)("h3",{id:"permissions"},"Permissions"),(0,s.kt)("p",null,"Roles are composed of a set of permissions, and Superset has many categories of\npermissions. Here are the different categories of permissions:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"Model & Action: models are entities like Dashboard, Slice, or User. Each model has\na fixed set of permissions, like ",(0,s.kt)("strong",{parentName:"li"},"can_edit"),", ",(0,s.kt)("strong",{parentName:"li"},"can_show"),", ",(0,s.kt)("strong",{parentName:"li"},"can_delete"),", ",(0,s.kt)("strong",{parentName:"li"},"can_list"),", ",(0,s.kt)("strong",{parentName:"li"},"can_add"),",\nand so on. For example, you can allow a user to delete dashboards by adding ",(0,s.kt)("strong",{parentName:"li"},"can_delete")," on\nDashboard entity to a role and granting this user that role."),(0,s.kt)("li",{parentName:"ul"},"Views: views are individual web pages, like the Explore view or the SQL Lab view.\nWhen granted to a user, they will see that view in its menu items, and be able to load that page."),(0,s.kt)("li",{parentName:"ul"},"Data source: For each data source, a permission is created. If the user does not have the\n",(0,s.kt)("inlineCode",{parentName:"li"},"all_datasource_access permission")," granted, the user will only be able to see Slices or explore the data sources that are granted to them"),(0,s.kt)("li",{parentName:"ul"},"Database: Granting access to a database allows for the user to access all\ndata sources within that database, and will enable the user to query that\ndatabase in SQL Lab, provided that the SQL Lab specific permission have been granted to the user")),(0,s.kt)("h3",{id:"restricting-access-to-a-subset-of-data-sources"},"Restricting Access to a Subset of Data Sources"),(0,s.kt)("p",null,"We recommend giving a user the ",(0,s.kt)("strong",{parentName:"p"},"Gamma")," role plus any other roles that would add\naccess to specific data sources. We recommend that you create individual roles for\neach access profile. For example, the users on the Finance team might have access to a set of\ndatabases and data sources; these permissions can be consolidated in a single role.\nUsers with this profile then need to be assigned the ",(0,s.kt)("strong",{parentName:"p"},"Gamma")," role as a foundation to\nthe models and views they can access, and that Finance role that is a collection of permissions to data objects."),(0,s.kt)("p",null,"A user can have multiple roles associated with them. For example, an executive on the Finance\nteam could be granted ",(0,s.kt)("strong",{parentName:"p"},"Gamma"),", ",(0,s.kt)("strong",{parentName:"p"},"Finance"),", and the ",(0,s.kt)("strong",{parentName:"p"},"Executive")," roles. The ",(0,s.kt)("strong",{parentName:"p"},"Executive"),"\nrole could provide access to a set of data sources and dashboards made available only to executives.\nIn the ",(0,s.kt)("strong",{parentName:"p"},"Dashboards")," view, a user can only see the ones they have access too\nbased on the roles and permissions that were attributed."),(0,s.kt)("h3",{id:"row-level-security"},"Row Level Security"),(0,s.kt)("p",null,"Using Row Level Security filters (under the ",(0,s.kt)("strong",{parentName:"p"},"Security")," menu) you can create filters\nthat are assigned to a particular table, as well as a set of roles.\nIf you want members of the Finance team to only have access to\nrows where ",(0,s.kt)("inlineCode",{parentName:"p"},'department = "finance"'),", you could:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"Create a Row Level Security filter with that clause (",(0,s.kt)("inlineCode",{parentName:"li"},'department = "finance"'),")"),(0,s.kt)("li",{parentName:"ul"},"Then assign the clause to the ",(0,s.kt)("strong",{parentName:"li"},"Finance")," role and the table it applies to")),(0,s.kt)("p",null,"The ",(0,s.kt)("strong",{parentName:"p"},"clause")," field, which can contain arbitrary text, is then added to the generated\nSQL statement\u2019s WHERE clause. So you could even do something like create a filter\nfor the last 30 days and apply it to a specific role, with a clause\nlike ",(0,s.kt)("inlineCode",{parentName:"p"},"date_field > DATE_SUB(NOW(), INTERVAL 30 DAY)"),". It can also support\nmultiple conditions: ",(0,s.kt)("inlineCode",{parentName:"p"},"client_id = 6")," AND ",(0,s.kt)("inlineCode",{parentName:"p"},'advertiser="foo"'),", etc."),(0,s.kt)("p",null,"All relevant Row level security filters will be combined together (under the hood,\nthe different SQL clauses are combined using AND statements). This means it's\npossible to create a situation where two roles conflict in such a way as to limit a table subset to empty."),(0,s.kt)("p",null,"For example, the filters ",(0,s.kt)("inlineCode",{parentName:"p"},"client_id=4")," and ",(0,s.kt)("inlineCode",{parentName:"p"},"client_id=5"),", applied to a role,\nwill result in users of that role having ",(0,s.kt)("inlineCode",{parentName:"p"},"client_id=4")," AND ",(0,s.kt)("inlineCode",{parentName:"p"},"client_id=5"),"\nadded to their query, which can never be true."),(0,s.kt)("h3",{id:"user-sessions"},"User Sessions"),(0,s.kt)("p",null,"Superset uses ",(0,s.kt)("a",{parentName:"p",href:"https://pypi.org/project/Flask/"},"Flask"),"\nand ",(0,s.kt)("a",{parentName:"p",href:"https://pypi.org/project/Flask-Login/"},"Flask-Login")," for user session management."),(0,s.kt)("p",null,"Session cookies are used to maintain session info and user state between requests,\nalthough they do not contain personal user information they serve the purpose of identifying\na user session on the server side.\nThe session cookie is encrypted with the application ",(0,s.kt)("inlineCode",{parentName:"p"},"SECRET_KEY")," and cannot be read by the client.\nSo it's very important to keep the ",(0,s.kt)("inlineCode",{parentName:"p"},"SECRET_KEY")," secret and set to a secure unique complex random value."),(0,s.kt)("p",null,"Flask and Flask-Login offer a number of configuration options to control session behavior."),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"Relevant Flask settings:")),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"SESSION_COOKIE_HTTPONLY"),": (default: ",(0,s.kt)("inlineCode",{parentName:"p"},"False"),"): Controls if cookies should be set with the ",(0,s.kt)("inlineCode",{parentName:"p"},"HttpOnly")," flag."),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"SESSION_COOKIE_SECURE"),": (default: ",(0,s.kt)("inlineCode",{parentName:"p"},"False"),") Browsers will only send cookies with requests over\nHTTPS if the cookie is marked \u201csecure\u201d. The application must be served over HTTPS for this to make sense."),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"SESSION_COOKIE_SAMESITE"),': (default: "Lax") Prevents the browser from sending this cookie along with cross-site requests.'),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"PERMANENT_SESSION_LIFETIME"),': (default: "31 days") The lifetime of a permanent session as a ',(0,s.kt)("inlineCode",{parentName:"p"},"datetime.timedelta")," object."),(0,s.kt)("h4",{id:"switching-to-server-side-sessions"},"Switching to server side sessions"),(0,s.kt)("p",null,"Server side sessions offer benefits over client side sessions on security and performance.\nBy enabling server side sessions, the session data is stored server side and only a session ID\nis sent to the client. When a user logs in, a session is created server side and the session ID\nis sent to the client in a cookie. The client will send the session ID with each request and the\nserver will use it to retrieve the session data.\nOn logout, the session is destroyed server side and the session cookie is deleted on the client side.\nThis reduces the risk for replay attacks and session hijacking."),(0,s.kt)("p",null,"Superset uses ",(0,s.kt)("a",{parentName:"p",href:"https://flask-session.readthedocs.io/en/latest/"},"Flask-Session")," to manage server side sessions.\nTo enable this extension you have to set:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-python"},"SESSION_SERVER_SIDE = True\n")),(0,s.kt)("p",null,"Flask-Session offers multiple backend session interfaces for Flask, here's an example for Redis:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-python"},'from redis import Redis\n\nSESSION_TYPE = "redis"\nSESSION_REDIS = Redis(host="redis", port=6379, db=0)\n# sign the session cookie sid\nSESSION_USE_SIGNER = True\n')),(0,s.kt)("h3",{id:"content-security-policy-csp"},"Content Security Policy (CSP)"),(0,s.kt)("p",null,"Superset uses the ",(0,s.kt)("a",{parentName:"p",href:"https://pypi.org/project/flask-talisman/"},"Talisman")," extension to enable implementation of a\n",(0,s.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP"},"Content Security Policy (CSP)"),", an added\nlayer of security that helps to detect and mitigate certain types of attacks, including\nCross-Site Scripting (XSS) and data injection attacks."),(0,s.kt)("p",null,"A CSP makes it possible for server administrators to reduce or eliminate the vectors by which XSS can\noccur by specifying the domains that the browser should consider to be valid sources of executable scripts.\nA CSP-compatible browser will then only execute scripts loaded in source files received from those allowed domains,\nignoring all other scripts (including inline scripts and event-handling HTML attributes)."),(0,s.kt)("p",null,"A policy is described using a series of policy directives, each of which describes the policy for\na certain resource type or policy area. You can check possible directives\n",(0,s.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy"},"here"),"."),(0,s.kt)("p",null,"It's extremely important to correctly configure a Content Security Policy when deploying Superset to\nprevent many types of attacks. Superset provides two variables in ",(0,s.kt)("inlineCode",{parentName:"p"},"config.py")," for deploying a CSP:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"TALISMAN_ENABLED")," defaults to ",(0,s.kt)("inlineCode",{parentName:"li"},"True"),"; set this to ",(0,s.kt)("inlineCode",{parentName:"li"},"False")," in order to disable CSP"),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"TALISMAN_CONFIG")," holds the actual the policy definition (",(0,s.kt)("em",{parentName:"li"},"see example below"),") as well as any\nother arguments to be passed to Talisman.")),(0,s.kt)("p",null,"When running in production mode, Superset will check at startup for the presence\nof a CSP. If one is not found, it will issue a warning with the security risks. For environments\nwhere CSP policies are defined outside of Superset using other software, administrators can disable\nthis warning using the ",(0,s.kt)("inlineCode",{parentName:"p"},"CONTENT_SECURITY_POLICY_WARNING")," key in ",(0,s.kt)("inlineCode",{parentName:"p"},"config.py"),"."),(0,s.kt)("h4",{id:"csp-requirements"},"CSP Requirements"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("p",{parentName:"li"},"Superset needs the ",(0,s.kt)("inlineCode",{parentName:"p"},"style-src unsafe-inline")," CSP directive in order to operate."),(0,s.kt)("pre",{parentName:"li"},(0,s.kt)("code",{parentName:"pre"},"style-src 'self' 'unsafe-inline'\n"))),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("p",{parentName:"li"},"Only scripts marked with a ",(0,s.kt)("a",{parentName:"p",href:"https://content-security-policy.com/nonce/"},"nonce")," can be loaded and executed.\nNonce is a random string automatically generated by Talisman on each page load.\nYou can get current nonce value by calling jinja macro ",(0,s.kt)("inlineCode",{parentName:"p"},"csp_nonce()"),"."),(0,s.kt)("pre",{parentName:"li"},(0,s.kt)("code",{parentName:"pre"},'<script nonce="{{ csp_nonce() }}">\n/* my script */\n<\/script>\n')))),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("p",{parentName:"li"},"Some dashboards load images using data URIs and require ",(0,s.kt)("inlineCode",{parentName:"p"},"data:")," in their ",(0,s.kt)("inlineCode",{parentName:"p"},"img-src")),(0,s.kt)("pre",{parentName:"li"},(0,s.kt)("code",{parentName:"pre"},"img-src 'self' data:\n"))),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("p",{parentName:"li"},"MapBox charts use workers and need to connect to MapBox servers in addition to the Superset origin"),(0,s.kt)("pre",{parentName:"li"},(0,s.kt)("code",{parentName:"pre"},"worker-src 'self' blob:\nconnect-src 'self' https://api.mapbox.com https://events.mapbox.com\n")))),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"Other CSP directives default to ",(0,s.kt)("inlineCode",{parentName:"li"},"'self'")," to limit content to the same origin as the Superset server.")),(0,s.kt)("p",null,"In order to adjust provided CSP configuration to your needs, follow the instructions and examples provided in\n",(0,s.kt)("a",{parentName:"p",href:"https://content-security-policy.com/"},"Content Security Policy Reference")),(0,s.kt)("h4",{id:"other-talisman-security-considerations"},"Other Talisman security considerations"),(0,s.kt)("p",null,"Setting ",(0,s.kt)("inlineCode",{parentName:"p"},"TALISMAN_ENABLED = True")," will invoke Talisman's protection with its default arguments,\nof which ",(0,s.kt)("inlineCode",{parentName:"p"},"content_security_policy")," is only one. Those can be found in the\n",(0,s.kt)("a",{parentName:"p",href:"https://pypi.org/project/flask-talisman/"},"Talisman documentation")," under ",(0,s.kt)("em",{parentName:"p"},"Options"),".\nThese generally improve security, but administrators should be aware of their existence."),(0,s.kt)("p",null,"In particular, the option of ",(0,s.kt)("inlineCode",{parentName:"p"},"force_https = True")," (",(0,s.kt)("inlineCode",{parentName:"p"},"False")," by default) may break Superset's Alerts & Reports\nif workers are configured to access charts via a ",(0,s.kt)("inlineCode",{parentName:"p"},"WEBDRIVER_BASEURL")," beginning\nwith ",(0,s.kt)("inlineCode",{parentName:"p"},"http://"),".  As long as a Superset deployment enforces https upstream, e.g.,\nthrough a loader balancer or application gateway, it should be acceptable to keep this\noption disabled. Otherwise, you may want to enable ",(0,s.kt)("inlineCode",{parentName:"p"},"force_https")," like this:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-python"},'TALISMAN_CONFIG = {\n    "force_https": True,\n    "content_security_policy": { ...\n')),(0,s.kt)("h3",{id:"reporting-security-vulnerabilities"},"Reporting Security Vulnerabilities"),(0,s.kt)("p",null,"Apache Software Foundation takes a rigorous standpoint in annihilating the security issues in its\nsoftware projects. Apache Superset is highly sensitive and forthcoming to issues pertaining to its\nfeatures and functionality."),(0,s.kt)("p",null,"If you have apprehensions regarding Superset security or you discover vulnerability or potential\nthreat, don\u2019t hesitate to get in touch with the Apache Security Team by dropping a mail at\n",(0,s.kt)("a",{parentName:"p",href:"mailto:security@apache.org."},"security@apache.org.")," In the mail, specify the project name Superset with the description of the\nissue or potential threat. You are also urged to recommend the way to reproduce and replicate the\nissue. The security team and the Superset community will get back to you after assessing and\nanalysing the findings."),(0,s.kt)("p",null,"PLEASE PAY ATTENTION to report the security issue on the security email before disclosing it on\npublic domain. The ASF Security Team maintains a page with the description of how vulnerabilities\nand potential threats are handled, check ",(0,s.kt)("a",{parentName:"p",href:"https://apache.org/security/committers.html"},"their web page"),"\nfor more details."))}u.isMDXComponent=!0},3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(67294);function s(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){s(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,s=function(e,t){if(null==e)return{};var a,n,s={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(s[a]=e[a]);return s}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(s[a]=e[a])}return s}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var a=e.components,s=e.mdxType,i=e.originalType,l=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),d=p(a),h=s,m=d["".concat(l,".").concat(h)]||d[h]||u[h]||i;return a?n.createElement(m,r(r({ref:t},c),{},{components:a})):n.createElement(m,r({ref:t},c))}));function m(e,t){var a=arguments,s=t&&t.mdxType;if("string"==typeof e||s){var i=a.length,r=new Array(i);r[0]=h;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[d]="string"==typeof e?e:s,r[1]=o;for(var p=2;p<i;p++)r[p]=a[p];return n.createElement.apply(null,r)}return n.createElement.apply(null,a)}h.displayName="MDXCreateElement"}}]);
\ No newline at end of file
diff --git a/assets/js/935f2afb.f934fa77.js b/assets/js/935f2afb.d76597f4.js
similarity index 98%
rename from assets/js/935f2afb.f934fa77.js
rename to assets/js/935f2afb.d76597f4.js
index 1734106..79c89c3 100644
--- a/assets/js/935f2afb.f934fa77.js
+++ b/assets/js/935f2afb.d76597f4.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Introduction","href":"/docs/intro","docId":"intro"},{"type":"category","label":"Installation and Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installing Locally Using Docker Compose","href":"/docs/installation/installing-superset-using-docker-compose","docId":"installation/installing-superset-using-docker-compose"},{"type":"link","label":"Installing From Scratch","href":"/docs/installation/installing-superset-from-scratch","docId":"installation/installing-superset-from-scratch"},{"type":"link","label":"Installing on Kubernetes","href":"/docs/installation/running-on-kubernetes","docId":"installation/running-on-kubernetes"},{"type":"link","label":"Configuring Superset","href":"/docs/installation/configuring-superset","docId":"installation/configuring-superset"},{"type":"link","label":"Additional Networking Settings","href":"/docs/installation/networking-settings","docId":"installation/networking-settings"},{"type":"link","label":"Caching","href":"/docs/installation/cache","docId":"installation/cache"},{"type":"link","label":"Event Logging","href":"/docs/installation/event-logging","docId":"installation/event-logging"},{"type":"link","label":"Upgrading Superset","href":"/docs/installation/upgrading-superset","docId":"installation/upgrading-superset"},{"type":"link","label":"Async Queries via Celery","href":"/docs/installation/async-queries-celery","docId":"installation/async-queries-celery"},{"type":"link","label":"Alerts and Reports","href":"/docs/installation/alerts-reports","docId":"installation/alerts-reports"},{"type":"link","label":"SQL Templating","href":"/docs/installation/sql-templating","docId":"installation/sql-templating"},{"type":"link","label":"Setup SSH Tunneling","href":"/docs/installation/setup-ssh-tunneling","docId":"installation/setup-ssh-tunneling"}]},{"type":"category","label":"Connecting to Databases","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installing Database Drivers","href":"/docs/databases/installing-database-drivers","docId":"databases/installing-database-drivers"},{"type":"link","label":"Adding New Drivers in Docker","href":"/docs/databases/docker-add-drivers","docId":"databases/docker-add-drivers"},{"type":"link","label":"Using Database Connection UI","href":"/docs/databases/db-connection-ui","docId":"databases/db-connection-ui"},{"type":"link","label":"Amazon Athena","href":"/docs/databases/athena","docId":"databases/athena"},{"type":"link","label":"Amazon DynamoDB","href":"/docs/databases/dynamodb","docId":"databases/dynamodb"},{"type":"link","label":"Amazon Redshift","href":"/docs/databases/redshift","docId":"databases/redshift"},{"type":"link","label":"StarRocks","href":"/docs/databases/starrocks","docId":"databases/starrocks"},{"type":"link","label":"Apache Drill","href":"/docs/databases/drill","docId":"databases/drill"},{"type":"link","label":"Apache Druid","href":"/docs/databases/druid","docId":"databases/druid"},{"type":"link","label":"Apache Hive","href":"/docs/databases/hive","docId":"databases/hive"},{"type":"link","label":"Apache Impala","href":"/docs/databases/impala","docId":"databases/impala"},{"type":"link","label":"Ascend.io","href":"/docs/databases/ascend","docId":"databases/ascend"},{"type":"link","label":"Apache Kylin","href":"/docs/databases/kylin","docId":"databases/kylin"},{"type":"link","label":"Apache Pinot","href":"/docs/databases/pinot","docId":"databases/pinot"},{"type":"link","label":"Apache Solr","href":"/docs/databases/solr","docId":"databases/solr"},{"type":"link","label":"Apache Spark SQL","href":"/docs/databases/spark-sql","docId":"databases/spark-sql"},{"type":"link","label":"ClickHouse","href":"/docs/databases/clickhouse","docId":"databases/clickhouse"},{"type":"link","label":"CockroachDB","href":"/docs/databases/cockroachdb","docId":"databases/cockroachdb"},{"type":"link","label":"RisingWave","href":"/docs/databases/risingwave","docId":"databases/risingwave"},{"type":"link","label":"Dremio","href":"/docs/databases/dremio","docId":"databases/dremio"},{"type":"link","label":"Elasticsearch","href":"/docs/databases/elasticsearch","docId":"databases/elasticsearch"},{"type":"link","label":"Exasol","href":"/docs/databases/exasol","docId":"databases/exasol"},{"type":"link","label":"Google BigQuery","href":"/docs/databases/bigquery","docId":"databases/bigquery"},{"type":"link","label":"Ocient DB","href":"/docs/databases/ocient","docId":"databases/ocient"},{"type":"link","label":"Google Sheets","href":"/docs/databases/google-sheets","docId":"databases/google-sheets"},{"type":"link","label":"Hana","href":"/docs/databases/hana","docId":"databases/hana"},{"type":"link","label":"IBM DB2","href":"/docs/databases/ibm-db2","docId":"databases/ibm-db2"},{"type":"link","label":"IBM Netezza Performance Server","href":"/docs/databases/netezza","docId":"databases/netezza"},{"type":"link","label":"MySQL","href":"/docs/databases/mysql","docId":"databases/mysql"},{"type":"link","label":"Oracle","href":"/docs/databases/oracle","docId":"databases/oracle"},{"type":"link","label":"Postgres","href":"/docs/databases/postgres","docId":"databases/postgres"},{"type":"link","label":"Presto","href":"/docs/databases/presto","docId":"databases/presto"},{"type":"link","label":"Snowflake","href":"/docs/databases/snowflake","docId":"databases/snowflake"},{"type":"link","label":"Microsoft SQL Server","href":"/docs/databases/sql-server","docId":"databases/sql-server"},{"type":"link","label":"Teradata","href":"/docs/databases/teradata","docId":"databases/teradata"},{"type":"link","label":"TimescaleDB","href":"/docs/databases/timescaledb","docId":"databases/timescaledb"},{"type":"link","label":"Vertica","href":"/docs/databases/vertica","docId":"databases/vertica"},{"type":"link","label":"Hologres","href":"/docs/databases/hologres","docId":"databases/hologres"},{"type":"link","label":"Trino","href":"/docs/databases/trino","docId":"databases/trino"},{"type":"link","label":"Rockset","href":"/docs/databases/rockset","docId":"databases/rockset"},{"type":"link","label":"CrateDB","href":"/docs/databases/cratedb","docId":"databases/cratedb"},{"type":"link","label":"Databricks","href":"/docs/databases/databricks","docId":"databases/databricks"},{"type":"link","label":"Firebird","href":"/docs/databases/firebird","docId":"databases/firebird"},{"type":"link","label":"YugabyteDB","href":"/docs/databases/yugabytedb","docId":"databases/yugabytedb"},{"type":"link","label":"Firebolt","href":"/docs/databases/firebolt","docId":"databases/firebolt"},{"type":"link","label":"Extra Database Settings","href":"/docs/databases/extra-settings","docId":"databases/extra-settings"},{"type":"link","label":"kusto","href":"/docs/databases/kusto","docId":"databases/kusto"},{"type":"link","label":"Querying across databases","href":"/docs/databases/meta-database","docId":"databases/meta-database"}]},{"type":"category","label":"Creating Charts and Dashboards","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Creating Your First Dashboard","href":"/docs/creating-charts-dashboards/creating-your-first-dashboard","docId":"creating-charts-dashboards/creating-your-first-dashboard"},{"type":"link","label":"Exploring Data in Superset","href":"/docs/creating-charts-dashboards/exploring-data","docId":"creating-charts-dashboards/exploring-data"}]},{"type":"category","label":"Miscellaneous","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Country Map Tools","href":"/docs/miscellaneous/country-map-tools","docId":"miscellaneous/country-map-tools"},{"type":"link","label":"Timezones","href":"/docs/miscellaneous/timezones","docId":"miscellaneous/timezones"},{"type":"link","label":"Importing and Exporting Datasources","href":"/docs/miscellaneous/importing-exporting-datasources","docId":"miscellaneous/importing-exporting-datasources"},{"type":"link","label":"Issue Codes","href":"/docs/miscellaneous/issue-codes","docId":"miscellaneous/issue-codes"},{"type":"link","label":"Chart Parameters Reference","href":"/docs/miscellaneous/chart-params","docId":"miscellaneous/chart-params"},{"type":"link","label":"Migrating from Legacy to Native Filters","href":"/docs/miscellaneous/native-filter-migration","docId":"miscellaneous/native-filter-migration"}]},{"type":"category","label":"Contributing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Contributing to Superset","href":"/docs/contributing/contributing-page","docId":"contributing/contributing-page"},{"type":"link","label":"Types of Contributions","href":"/docs/contributing/types-of-contributions","docId":"contributing/types-of-contributions"},{"type":"link","label":"Pull Request Guidelines","href":"/docs/contributing/pull-request-guidelines","docId":"contributing/pull-request-guidelines"},{"type":"link","label":"Style Guide","href":"/docs/contributing/style-guide","docId":"contributing/style-guide"},{"type":"link","label":"Running a Local Flask Backend","href":"/docs/contributing/local-backend","docId":"contributing/local-backend"},{"type":"link","label":"Pre-commit Hooks and Linting","href":"/docs/contributing/hooks-and-linting","docId":"contributing/hooks-and-linting"},{"type":"link","label":"Conventions and Typing","href":"/docs/contributing/conventions-and-typing","docId":"contributing/conventions-and-typing"},{"type":"link","label":"Testing","href":"/docs/contributing/testing-locally","docId":"contributing/testing-locally"},{"type":"link","label":"Translating","href":"/docs/contributing/translations","docId":"contributing/translations"},{"type":"link","label":"Creating Visualization Plugins","href":"/docs/contributing/creating-viz-plugins","docId":"contributing/creating-viz-plugins"}]},{"type":"link","label":"Frequently Asked Questions","href":"/docs/frequently-asked-questions","docId":"frequently-asked-questions"},{"type":"link","label":"API","href":"/docs/api","docId":"api"},{"type":"category","label":"Security","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"CVEs by release","href":"/docs/security/cves","docId":"security/cves"}],"href":"/docs/security/"}]},"docs":{"api":{"id":"api","title":"API","description":"API","sidebar":"tutorialSidebar"},"contributing/contributing-page":{"id":"contributing/contributing-page","title":"Contributing to Superset","description":"Contributing to Superset","sidebar":"tutorialSidebar"},"contributing/conventions-and-typing":{"id":"contributing/conventions-and-typing","title":"Conventions and Typing","description":"Conventions","sidebar":"tutorialSidebar"},"contributing/creating-viz-plugins":{"id":"contributing/creating-viz-plugins","title":"Creating Visualization Plugins","description":"Creating Visualization Plugins","sidebar":"tutorialSidebar"},"contributing/hooks-and-linting":{"id":"contributing/hooks-and-linting","title":"Pre-commit Hooks and Linting","description":"Git Hooks","sidebar":"tutorialSidebar"},"contributing/local-backend":{"id":"contributing/local-backend","title":"Running a Local Flask Backend","description":"Flask server","sidebar":"tutorialSidebar"},"contributing/pull-request-guidelines":{"id":"contributing/pull-request-guidelines","title":"Pull Request Guidelines","description":"Pull Request Guidelines","sidebar":"tutorialSidebar"},"contributing/style-guide":{"id":"contributing/style-guide","title":"Style Guide","description":"Design Guidelines","sidebar":"tutorialSidebar"},"contributing/testing-locally":{"id":"contributing/testing-locally","title":"Testing","description":"Testing","sidebar":"tutorialSidebar"},"contributing/translations":{"id":"contributing/translations","title":"Translating","description":"Translating","sidebar":"tutorialSidebar"},"contributing/types-of-contributions":{"id":"contributing/types-of-contributions","title":"Types of Contributions","description":"Types of Contributions","sidebar":"tutorialSidebar"},"creating-charts-dashboards/creating-your-first-dashboard":{"id":"creating-charts-dashboards/creating-your-first-dashboard","title":"Creating Your First Dashboard","description":"Creating Your First Dashboard","sidebar":"tutorialSidebar"},"creating-charts-dashboards/exploring-data":{"id":"creating-charts-dashboards/exploring-data","title":"Exploring Data in Superset","description":"Exploring Data in Superset","sidebar":"tutorialSidebar"},"databases/ascend":{"id":"databases/ascend","title":"Ascend.io","description":"Ascend.io","sidebar":"tutorialSidebar"},"databases/athena":{"id":"databases/athena","title":"Amazon Athena","description":"AWS Athena","sidebar":"tutorialSidebar"},"databases/bigquery":{"id":"databases/bigquery","title":"Google BigQuery","description":"Google BigQuery","sidebar":"tutorialSidebar"},"databases/clickhouse":{"id":"databases/clickhouse","title":"ClickHouse","description":"ClickHouse","sidebar":"tutorialSidebar"},"databases/cockroachdb":{"id":"databases/cockroachdb","title":"CockroachDB","description":"CockroachDB","sidebar":"tutorialSidebar"},"databases/cratedb":{"id":"databases/cratedb","title":"CrateDB","description":"CrateDB","sidebar":"tutorialSidebar"},"databases/databricks":{"id":"databases/databricks","title":"Databricks","description":"Databricks","sidebar":"tutorialSidebar"},"databases/db-connection-ui":{"id":"databases/db-connection-ui","title":"Using Database Connection UI","description":"Here is the documentation on how to leverage the new DB Connection UI. This will provide admins the ability to enhance the UX for users who want to connect to new databases.","sidebar":"tutorialSidebar"},"databases/docker-add-drivers":{"id":"databases/docker-add-drivers","title":"Adding New Drivers in Docker","description":"Adding New Database Drivers in Docker","sidebar":"tutorialSidebar"},"databases/dremio":{"id":"databases/dremio","title":"Dremio","description":"Dremio","sidebar":"tutorialSidebar"},"databases/drill":{"id":"databases/drill","title":"Apache Drill","description":"Apache Drill","sidebar":"tutorialSidebar"},"databases/druid":{"id":"databases/druid","title":"Apache Druid","description":"Apache Druid","sidebar":"tutorialSidebar"},"databases/dynamodb":{"id":"databases/dynamodb","title":"Amazon DynamoDB","description":"AWS DynamoDB","sidebar":"tutorialSidebar"},"databases/elasticsearch":{"id":"databases/elasticsearch","title":"Elasticsearch","description":"Elasticsearch","sidebar":"tutorialSidebar"},"databases/exasol":{"id":"databases/exasol","title":"Exasol","description":"Exasol","sidebar":"tutorialSidebar"},"databases/extra-settings":{"id":"databases/extra-settings","title":"Extra Database Settings","description":"Extra Database Settings","sidebar":"tutorialSidebar"},"databases/firebird":{"id":"databases/firebird","title":"Firebird","description":"Firebird","sidebar":"tutorialSidebar"},"databases/firebolt":{"id":"databases/firebolt","title":"Firebolt","description":"Firebolt","sidebar":"tutorialSidebar"},"databases/google-sheets":{"id":"databases/google-sheets","title":"Google Sheets","description":"Google Sheets","sidebar":"tutorialSidebar"},"databases/hana":{"id":"databases/hana","title":"Hana","description":"Hana","sidebar":"tutorialSidebar"},"databases/hive":{"id":"databases/hive","title":"Apache Hive","description":"Apache Hive","sidebar":"tutorialSidebar"},"databases/hologres":{"id":"databases/hologres","title":"Hologres","description":"Hologres","sidebar":"tutorialSidebar"},"databases/ibm-db2":{"id":"databases/ibm-db2","title":"IBM DB2","description":"IBM DB2","sidebar":"tutorialSidebar"},"databases/impala":{"id":"databases/impala","title":"Apache Impala","description":"Apache Impala","sidebar":"tutorialSidebar"},"databases/installing-database-drivers":{"id":"databases/installing-database-drivers","title":"Installing Database Drivers","description":"Install Database Drivers","sidebar":"tutorialSidebar"},"databases/kusto":{"id":"databases/kusto","title":"kusto","description":"Kusto","sidebar":"tutorialSidebar"},"databases/kylin":{"id":"databases/kylin","title":"Apache Kylin","description":"Apache Kylin","sidebar":"tutorialSidebar"},"databases/meta-database":{"id":"databases/meta-database","title":"Querying across databases","description":"Querying across databases","sidebar":"tutorialSidebar"},"databases/mysql":{"id":"databases/mysql","title":"MySQL","description":"MySQL","sidebar":"tutorialSidebar"},"databases/netezza":{"id":"databases/netezza","title":"IBM Netezza Performance Server","description":"IBM Netezza Performance Server","sidebar":"tutorialSidebar"},"databases/ocient":{"id":"databases/ocient","title":"Ocient DB","description":"Ocient DB","sidebar":"tutorialSidebar"},"databases/oracle":{"id":"databases/oracle","title":"Oracle","description":"Oracle","sidebar":"tutorialSidebar"},"databases/pinot":{"id":"databases/pinot","title":"Apache Pinot","description":"Apache Pinot","sidebar":"tutorialSidebar"},"databases/postgres":{"id":"databases/postgres","title":"Postgres","description":"Postgres","sidebar":"tutorialSidebar"},"databases/presto":{"id":"databases/presto","title":"Presto","description":"Presto","sidebar":"tutorialSidebar"},"databases/redshift":{"id":"databases/redshift","title":"Amazon Redshift","description":"AWS Redshift","sidebar":"tutorialSidebar"},"databases/risingwave":{"id":"databases/risingwave","title":"RisingWave","description":"RisingWave","sidebar":"tutorialSidebar"},"databases/rockset":{"id":"databases/rockset","title":"Rockset","description":"Rockset","sidebar":"tutorialSidebar"},"databases/snowflake":{"id":"databases/snowflake","title":"Snowflake","description":"Snowflake","sidebar":"tutorialSidebar"},"databases/solr":{"id":"databases/solr","title":"Apache Solr","description":"Apache Solr","sidebar":"tutorialSidebar"},"databases/spark-sql":{"id":"databases/spark-sql","title":"Apache Spark SQL","description":"Apache Spark SQL","sidebar":"tutorialSidebar"},"databases/sql-server":{"id":"databases/sql-server","title":"Microsoft SQL Server","description":"SQL Server","sidebar":"tutorialSidebar"},"databases/starrocks":{"id":"databases/starrocks","title":"StarRocks","description":"StarRocks","sidebar":"tutorialSidebar"},"databases/teradata":{"id":"databases/teradata","title":"Teradata","description":"Teradata","sidebar":"tutorialSidebar"},"databases/timescaledb":{"id":"databases/timescaledb","title":"TimescaleDB","description":"TimescaleDB","sidebar":"tutorialSidebar"},"databases/trino":{"id":"databases/trino","title":"Trino","description":"Trino","sidebar":"tutorialSidebar"},"databases/vertica":{"id":"databases/vertica","title":"Vertica","description":"Vertica","sidebar":"tutorialSidebar"},"databases/yugabytedb":{"id":"databases/yugabytedb","title":"YugabyteDB","description":"YugabyteDB","sidebar":"tutorialSidebar"},"frequently-asked-questions":{"id":"frequently-asked-questions","title":"Frequently Asked Questions","description":"Frequently Asked Questions","sidebar":"tutorialSidebar"},"installation/alerts-reports":{"id":"installation/alerts-reports","title":"Alerts and Reports","description":"Alerts and Reports","sidebar":"tutorialSidebar"},"installation/async-queries-celery":{"id":"installation/async-queries-celery","title":"Async Queries via Celery","description":"Async Queries via Celery","sidebar":"tutorialSidebar"},"installation/cache":{"id":"installation/cache","title":"Caching","description":"Caching","sidebar":"tutorialSidebar"},"installation/configuring-superset":{"id":"installation/configuring-superset","title":"Configuring Superset","description":"Configuring Superset","sidebar":"tutorialSidebar"},"installation/event-logging":{"id":"installation/event-logging","title":"Event Logging","description":"Logging","sidebar":"tutorialSidebar"},"installation/installing-superset-from-scratch":{"id":"installation/installing-superset-from-scratch","title":"Installing From Scratch","description":"Installing Superset from Scratch","sidebar":"tutorialSidebar"},"installation/installing-superset-using-docker-compose":{"id":"installation/installing-superset-using-docker-compose","title":"Installing Locally Using Docker Compose","description":"Installing Superset Locally Using Docker Compose","sidebar":"tutorialSidebar"},"installation/networking-settings":{"id":"installation/networking-settings","title":"Additional Networking Settings","description":"Additional Networking Settings","sidebar":"tutorialSidebar"},"installation/running-on-kubernetes":{"id":"installation/running-on-kubernetes","title":"Installing on Kubernetes","description":"Installing on Kubernetes","sidebar":"tutorialSidebar"},"installation/setup-ssh-tunneling":{"id":"installation/setup-ssh-tunneling","title":"Setup SSH Tunneling","description":"SSH Tunneling","sidebar":"tutorialSidebar"},"installation/sql-templating":{"id":"installation/sql-templating","title":"SQL Templating","description":"SQL Templating","sidebar":"tutorialSidebar"},"installation/upgrading-superset":{"id":"installation/upgrading-superset","title":"Upgrading Superset","description":"Upgrading Superset","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Introduction","description":"What is Apache Superset?","sidebar":"tutorialSidebar"},"miscellaneous/chart-params":{"id":"miscellaneous/chart-params","title":"Chart Parameters Reference","description":"Chart Parameters","sidebar":"tutorialSidebar"},"miscellaneous/country-map-tools":{"id":"miscellaneous/country-map-tools","title":"Country Map Tools","description":"The Country Map Visualization","sidebar":"tutorialSidebar"},"miscellaneous/importing-exporting-datasources":{"id":"miscellaneous/importing-exporting-datasources","title":"Importing and Exporting Datasources","description":"Importing and Exporting Datasources","sidebar":"tutorialSidebar"},"miscellaneous/issue-codes":{"id":"miscellaneous/issue-codes","title":"Issue Codes","description":"This page lists issue codes that may be displayed in","sidebar":"tutorialSidebar"},"miscellaneous/native-filter-migration":{"id":"miscellaneous/native-filter-migration","title":"Migrating from Legacy to Native Filters","description":"The superset native-filters CLI command group\u2014somewhat akin to an Alembic migration\u2014","sidebar":"tutorialSidebar"},"miscellaneous/timezones":{"id":"miscellaneous/timezones","title":"Timezones","description":"Timezones","sidebar":"tutorialSidebar"},"security/cves":{"id":"security/cves","title":"CVEs by release","description":"Version 2.1.1","sidebar":"tutorialSidebar"},"security/security":{"id":"security/security","title":"Security","description":"Security in Superset is handled by Flask AppBuilder (FAB), an application development framework","sidebar":"tutorialSidebar"}}}')}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[53],{1109:a=>{a.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Introduction","href":"/docs/intro","docId":"intro"},{"type":"category","label":"Installation and Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installing Locally Using Docker Compose","href":"/docs/installation/installing-superset-using-docker-compose","docId":"installation/installing-superset-using-docker-compose"},{"type":"link","label":"Installing From Scratch","href":"/docs/installation/installing-superset-from-scratch","docId":"installation/installing-superset-from-scratch"},{"type":"link","label":"Installing on Kubernetes","href":"/docs/installation/running-on-kubernetes","docId":"installation/running-on-kubernetes"},{"type":"link","label":"Configuring Superset","href":"/docs/installation/configuring-superset","docId":"installation/configuring-superset"},{"type":"link","label":"Additional Networking Settings","href":"/docs/installation/networking-settings","docId":"installation/networking-settings"},{"type":"link","label":"Caching","href":"/docs/installation/cache","docId":"installation/cache"},{"type":"link","label":"Event Logging","href":"/docs/installation/event-logging","docId":"installation/event-logging"},{"type":"link","label":"Upgrading Superset","href":"/docs/installation/upgrading-superset","docId":"installation/upgrading-superset"},{"type":"link","label":"Async Queries via Celery","href":"/docs/installation/async-queries-celery","docId":"installation/async-queries-celery"},{"type":"link","label":"Alerts and Reports","href":"/docs/installation/alerts-reports","docId":"installation/alerts-reports"},{"type":"link","label":"SQL Templating","href":"/docs/installation/sql-templating","docId":"installation/sql-templating"},{"type":"link","label":"Setup SSH Tunneling","href":"/docs/installation/setup-ssh-tunneling","docId":"installation/setup-ssh-tunneling"}]},{"type":"category","label":"Connecting to Databases","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installing Database Drivers","href":"/docs/databases/installing-database-drivers","docId":"databases/installing-database-drivers"},{"type":"link","label":"Adding New Drivers in Docker","href":"/docs/databases/docker-add-drivers","docId":"databases/docker-add-drivers"},{"type":"link","label":"Using Database Connection UI","href":"/docs/databases/db-connection-ui","docId":"databases/db-connection-ui"},{"type":"link","label":"Amazon Athena","href":"/docs/databases/athena","docId":"databases/athena"},{"type":"link","label":"Amazon DynamoDB","href":"/docs/databases/dynamodb","docId":"databases/dynamodb"},{"type":"link","label":"Amazon Redshift","href":"/docs/databases/redshift","docId":"databases/redshift"},{"type":"link","label":"StarRocks","href":"/docs/databases/starrocks","docId":"databases/starrocks"},{"type":"link","label":"Apache Drill","href":"/docs/databases/drill","docId":"databases/drill"},{"type":"link","label":"Apache Druid","href":"/docs/databases/druid","docId":"databases/druid"},{"type":"link","label":"Apache Hive","href":"/docs/databases/hive","docId":"databases/hive"},{"type":"link","label":"Apache Impala","href":"/docs/databases/impala","docId":"databases/impala"},{"type":"link","label":"Ascend.io","href":"/docs/databases/ascend","docId":"databases/ascend"},{"type":"link","label":"Apache Kylin","href":"/docs/databases/kylin","docId":"databases/kylin"},{"type":"link","label":"Apache Pinot","href":"/docs/databases/pinot","docId":"databases/pinot"},{"type":"link","label":"Apache Solr","href":"/docs/databases/solr","docId":"databases/solr"},{"type":"link","label":"Apache Spark SQL","href":"/docs/databases/spark-sql","docId":"databases/spark-sql"},{"type":"link","label":"ClickHouse","href":"/docs/databases/clickhouse","docId":"databases/clickhouse"},{"type":"link","label":"CockroachDB","href":"/docs/databases/cockroachdb","docId":"databases/cockroachdb"},{"type":"link","label":"RisingWave","href":"/docs/databases/risingwave","docId":"databases/risingwave"},{"type":"link","label":"Dremio","href":"/docs/databases/dremio","docId":"databases/dremio"},{"type":"link","label":"Elasticsearch","href":"/docs/databases/elasticsearch","docId":"databases/elasticsearch"},{"type":"link","label":"Exasol","href":"/docs/databases/exasol","docId":"databases/exasol"},{"type":"link","label":"Google BigQuery","href":"/docs/databases/bigquery","docId":"databases/bigquery"},{"type":"link","label":"Ocient DB","href":"/docs/databases/ocient","docId":"databases/ocient"},{"type":"link","label":"Google Sheets","href":"/docs/databases/google-sheets","docId":"databases/google-sheets"},{"type":"link","label":"Hana","href":"/docs/databases/hana","docId":"databases/hana"},{"type":"link","label":"IBM DB2","href":"/docs/databases/ibm-db2","docId":"databases/ibm-db2"},{"type":"link","label":"IBM Netezza Performance Server","href":"/docs/databases/netezza","docId":"databases/netezza"},{"type":"link","label":"MySQL","href":"/docs/databases/mysql","docId":"databases/mysql"},{"type":"link","label":"Oracle","href":"/docs/databases/oracle","docId":"databases/oracle"},{"type":"link","label":"Postgres","href":"/docs/databases/postgres","docId":"databases/postgres"},{"type":"link","label":"Presto","href":"/docs/databases/presto","docId":"databases/presto"},{"type":"link","label":"Snowflake","href":"/docs/databases/snowflake","docId":"databases/snowflake"},{"type":"link","label":"Microsoft SQL Server","href":"/docs/databases/sql-server","docId":"databases/sql-server"},{"type":"link","label":"Teradata","href":"/docs/databases/teradata","docId":"databases/teradata"},{"type":"link","label":"TimescaleDB","href":"/docs/databases/timescaledb","docId":"databases/timescaledb"},{"type":"link","label":"Vertica","href":"/docs/databases/vertica","docId":"databases/vertica"},{"type":"link","label":"Hologres","href":"/docs/databases/hologres","docId":"databases/hologres"},{"type":"link","label":"Trino","href":"/docs/databases/trino","docId":"databases/trino"},{"type":"link","label":"Rockset","href":"/docs/databases/rockset","docId":"databases/rockset"},{"type":"link","label":"CrateDB","href":"/docs/databases/cratedb","docId":"databases/cratedb"},{"type":"link","label":"Databricks","href":"/docs/databases/databricks","docId":"databases/databricks"},{"type":"link","label":"Firebird","href":"/docs/databases/firebird","docId":"databases/firebird"},{"type":"link","label":"YugabyteDB","href":"/docs/databases/yugabytedb","docId":"databases/yugabytedb"},{"type":"link","label":"Firebolt","href":"/docs/databases/firebolt","docId":"databases/firebolt"},{"type":"link","label":"Extra Database Settings","href":"/docs/databases/extra-settings","docId":"databases/extra-settings"},{"type":"link","label":"kusto","href":"/docs/databases/kusto","docId":"databases/kusto"},{"type":"link","label":"Querying across databases","href":"/docs/databases/meta-database","docId":"databases/meta-database"}]},{"type":"category","label":"Creating Charts and Dashboards","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Creating Your First Dashboard","href":"/docs/creating-charts-dashboards/creating-your-first-dashboard","docId":"creating-charts-dashboards/creating-your-first-dashboard"},{"type":"link","label":"Exploring Data in Superset","href":"/docs/creating-charts-dashboards/exploring-data","docId":"creating-charts-dashboards/exploring-data"}]},{"type":"category","label":"Miscellaneous","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Country Map Tools","href":"/docs/miscellaneous/country-map-tools","docId":"miscellaneous/country-map-tools"},{"type":"link","label":"Timezones","href":"/docs/miscellaneous/timezones","docId":"miscellaneous/timezones"},{"type":"link","label":"Importing and Exporting Datasources","href":"/docs/miscellaneous/importing-exporting-datasources","docId":"miscellaneous/importing-exporting-datasources"},{"type":"link","label":"Issue Codes","href":"/docs/miscellaneous/issue-codes","docId":"miscellaneous/issue-codes"},{"type":"link","label":"Chart Parameters Reference","href":"/docs/miscellaneous/chart-params","docId":"miscellaneous/chart-params"},{"type":"link","label":"Migrating from Legacy to Native Filters","href":"/docs/miscellaneous/native-filter-migration","docId":"miscellaneous/native-filter-migration"}]},{"type":"category","label":"Contributing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Contributing to Superset","href":"/docs/contributing/contributing-page","docId":"contributing/contributing-page"},{"type":"link","label":"Types of Contributions","href":"/docs/contributing/types-of-contributions","docId":"contributing/types-of-contributions"},{"type":"link","label":"Pull Request Guidelines","href":"/docs/contributing/pull-request-guidelines","docId":"contributing/pull-request-guidelines"},{"type":"link","label":"Style Guide","href":"/docs/contributing/style-guide","docId":"contributing/style-guide"},{"type":"link","label":"Running a Local Flask Backend","href":"/docs/contributing/local-backend","docId":"contributing/local-backend"},{"type":"link","label":"Pre-commit Hooks and Linting","href":"/docs/contributing/hooks-and-linting","docId":"contributing/hooks-and-linting"},{"type":"link","label":"Conventions and Typing","href":"/docs/contributing/conventions-and-typing","docId":"contributing/conventions-and-typing"},{"type":"link","label":"Testing","href":"/docs/contributing/testing-locally","docId":"contributing/testing-locally"},{"type":"link","label":"Translating","href":"/docs/contributing/translations","docId":"contributing/translations"},{"type":"link","label":"Creating Visualization Plugins","href":"/docs/contributing/creating-viz-plugins","docId":"contributing/creating-viz-plugins"}]},{"type":"link","label":"Frequently Asked Questions","href":"/docs/frequently-asked-questions","docId":"frequently-asked-questions"},{"type":"link","label":"API","href":"/docs/api","docId":"api"},{"type":"category","label":"Security","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"CVEs by release","href":"/docs/security/cves","docId":"security/cves"}],"href":"/docs/security/"}]},"docs":{"api":{"id":"api","title":"API","description":"API","sidebar":"tutorialSidebar"},"contributing/contributing-page":{"id":"contributing/contributing-page","title":"Contributing to Superset","description":"Contributing to Superset","sidebar":"tutorialSidebar"},"contributing/conventions-and-typing":{"id":"contributing/conventions-and-typing","title":"Conventions and Typing","description":"Conventions","sidebar":"tutorialSidebar"},"contributing/creating-viz-plugins":{"id":"contributing/creating-viz-plugins","title":"Creating Visualization Plugins","description":"Creating Visualization Plugins","sidebar":"tutorialSidebar"},"contributing/hooks-and-linting":{"id":"contributing/hooks-and-linting","title":"Pre-commit Hooks and Linting","description":"Git Hooks","sidebar":"tutorialSidebar"},"contributing/local-backend":{"id":"contributing/local-backend","title":"Running a Local Flask Backend","description":"Flask server","sidebar":"tutorialSidebar"},"contributing/pull-request-guidelines":{"id":"contributing/pull-request-guidelines","title":"Pull Request Guidelines","description":"Pull Request Guidelines","sidebar":"tutorialSidebar"},"contributing/style-guide":{"id":"contributing/style-guide","title":"Style Guide","description":"Design Guidelines","sidebar":"tutorialSidebar"},"contributing/testing-locally":{"id":"contributing/testing-locally","title":"Testing","description":"Testing","sidebar":"tutorialSidebar"},"contributing/translations":{"id":"contributing/translations","title":"Translating","description":"Translating","sidebar":"tutorialSidebar"},"contributing/types-of-contributions":{"id":"contributing/types-of-contributions","title":"Types of Contributions","description":"Types of Contributions","sidebar":"tutorialSidebar"},"creating-charts-dashboards/creating-your-first-dashboard":{"id":"creating-charts-dashboards/creating-your-first-dashboard","title":"Creating Your First Dashboard","description":"Creating Your First Dashboard","sidebar":"tutorialSidebar"},"creating-charts-dashboards/exploring-data":{"id":"creating-charts-dashboards/exploring-data","title":"Exploring Data in Superset","description":"Exploring Data in Superset","sidebar":"tutorialSidebar"},"databases/ascend":{"id":"databases/ascend","title":"Ascend.io","description":"Ascend.io","sidebar":"tutorialSidebar"},"databases/athena":{"id":"databases/athena","title":"Amazon Athena","description":"AWS Athena","sidebar":"tutorialSidebar"},"databases/bigquery":{"id":"databases/bigquery","title":"Google BigQuery","description":"Google BigQuery","sidebar":"tutorialSidebar"},"databases/clickhouse":{"id":"databases/clickhouse","title":"ClickHouse","description":"ClickHouse","sidebar":"tutorialSidebar"},"databases/cockroachdb":{"id":"databases/cockroachdb","title":"CockroachDB","description":"CockroachDB","sidebar":"tutorialSidebar"},"databases/cratedb":{"id":"databases/cratedb","title":"CrateDB","description":"CrateDB","sidebar":"tutorialSidebar"},"databases/databricks":{"id":"databases/databricks","title":"Databricks","description":"Databricks","sidebar":"tutorialSidebar"},"databases/db-connection-ui":{"id":"databases/db-connection-ui","title":"Using Database Connection UI","description":"Here is the documentation on how to leverage the new DB Connection UI. This will provide admins the ability to enhance the UX for users who want to connect to new databases.","sidebar":"tutorialSidebar"},"databases/docker-add-drivers":{"id":"databases/docker-add-drivers","title":"Adding New Drivers in Docker","description":"Adding New Database Drivers in Docker","sidebar":"tutorialSidebar"},"databases/dremio":{"id":"databases/dremio","title":"Dremio","description":"Dremio","sidebar":"tutorialSidebar"},"databases/drill":{"id":"databases/drill","title":"Apache Drill","description":"Apache Drill","sidebar":"tutorialSidebar"},"databases/druid":{"id":"databases/druid","title":"Apache Druid","description":"Apache Druid","sidebar":"tutorialSidebar"},"databases/dynamodb":{"id":"databases/dynamodb","title":"Amazon DynamoDB","description":"AWS DynamoDB","sidebar":"tutorialSidebar"},"databases/elasticsearch":{"id":"databases/elasticsearch","title":"Elasticsearch","description":"Elasticsearch","sidebar":"tutorialSidebar"},"databases/exasol":{"id":"databases/exasol","title":"Exasol","description":"Exasol","sidebar":"tutorialSidebar"},"databases/extra-settings":{"id":"databases/extra-settings","title":"Extra Database Settings","description":"Extra Database Settings","sidebar":"tutorialSidebar"},"databases/firebird":{"id":"databases/firebird","title":"Firebird","description":"Firebird","sidebar":"tutorialSidebar"},"databases/firebolt":{"id":"databases/firebolt","title":"Firebolt","description":"Firebolt","sidebar":"tutorialSidebar"},"databases/google-sheets":{"id":"databases/google-sheets","title":"Google Sheets","description":"Google Sheets","sidebar":"tutorialSidebar"},"databases/hana":{"id":"databases/hana","title":"Hana","description":"Hana","sidebar":"tutorialSidebar"},"databases/hive":{"id":"databases/hive","title":"Apache Hive","description":"Apache Hive","sidebar":"tutorialSidebar"},"databases/hologres":{"id":"databases/hologres","title":"Hologres","description":"Hologres","sidebar":"tutorialSidebar"},"databases/ibm-db2":{"id":"databases/ibm-db2","title":"IBM DB2","description":"IBM DB2","sidebar":"tutorialSidebar"},"databases/impala":{"id":"databases/impala","title":"Apache Impala","description":"Apache Impala","sidebar":"tutorialSidebar"},"databases/installing-database-drivers":{"id":"databases/installing-database-drivers","title":"Installing Database Drivers","description":"Install Database Drivers","sidebar":"tutorialSidebar"},"databases/kusto":{"id":"databases/kusto","title":"kusto","description":"Kusto","sidebar":"tutorialSidebar"},"databases/kylin":{"id":"databases/kylin","title":"Apache Kylin","description":"Apache Kylin","sidebar":"tutorialSidebar"},"databases/meta-database":{"id":"databases/meta-database","title":"Querying across databases","description":"Querying across databases","sidebar":"tutorialSidebar"},"databases/mysql":{"id":"databases/mysql","title":"MySQL","description":"MySQL","sidebar":"tutorialSidebar"},"databases/netezza":{"id":"databases/netezza","title":"IBM Netezza Performance Server","description":"IBM Netezza Performance Server","sidebar":"tutorialSidebar"},"databases/ocient":{"id":"databases/ocient","title":"Ocient DB","description":"Ocient DB","sidebar":"tutorialSidebar"},"databases/oracle":{"id":"databases/oracle","title":"Oracle","description":"Oracle","sidebar":"tutorialSidebar"},"databases/pinot":{"id":"databases/pinot","title":"Apache Pinot","description":"Apache Pinot","sidebar":"tutorialSidebar"},"databases/postgres":{"id":"databases/postgres","title":"Postgres","description":"Postgres","sidebar":"tutorialSidebar"},"databases/presto":{"id":"databases/presto","title":"Presto","description":"Presto","sidebar":"tutorialSidebar"},"databases/redshift":{"id":"databases/redshift","title":"Amazon Redshift","description":"AWS Redshift","sidebar":"tutorialSidebar"},"databases/risingwave":{"id":"databases/risingwave","title":"RisingWave","description":"RisingWave","sidebar":"tutorialSidebar"},"databases/rockset":{"id":"databases/rockset","title":"Rockset","description":"Rockset","sidebar":"tutorialSidebar"},"databases/snowflake":{"id":"databases/snowflake","title":"Snowflake","description":"Snowflake","sidebar":"tutorialSidebar"},"databases/solr":{"id":"databases/solr","title":"Apache Solr","description":"Apache Solr","sidebar":"tutorialSidebar"},"databases/spark-sql":{"id":"databases/spark-sql","title":"Apache Spark SQL","description":"Apache Spark SQL","sidebar":"tutorialSidebar"},"databases/sql-server":{"id":"databases/sql-server","title":"Microsoft SQL Server","description":"SQL Server","sidebar":"tutorialSidebar"},"databases/starrocks":{"id":"databases/starrocks","title":"StarRocks","description":"StarRocks","sidebar":"tutorialSidebar"},"databases/teradata":{"id":"databases/teradata","title":"Teradata","description":"Teradata","sidebar":"tutorialSidebar"},"databases/timescaledb":{"id":"databases/timescaledb","title":"TimescaleDB","description":"TimescaleDB","sidebar":"tutorialSidebar"},"databases/trino":{"id":"databases/trino","title":"Trino","description":"Trino","sidebar":"tutorialSidebar"},"databases/vertica":{"id":"databases/vertica","title":"Vertica","description":"Vertica","sidebar":"tutorialSidebar"},"databases/yugabytedb":{"id":"databases/yugabytedb","title":"YugabyteDB","description":"YugabyteDB","sidebar":"tutorialSidebar"},"frequently-asked-questions":{"id":"frequently-asked-questions","title":"Frequently Asked Questions","description":"Frequently Asked Questions","sidebar":"tutorialSidebar"},"installation/alerts-reports":{"id":"installation/alerts-reports","title":"Alerts and Reports","description":"Alerts and Reports","sidebar":"tutorialSidebar"},"installation/async-queries-celery":{"id":"installation/async-queries-celery","title":"Async Queries via Celery","description":"Async Queries via Celery","sidebar":"tutorialSidebar"},"installation/cache":{"id":"installation/cache","title":"Caching","description":"Caching","sidebar":"tutorialSidebar"},"installation/configuring-superset":{"id":"installation/configuring-superset","title":"Configuring Superset","description":"Configuring Superset","sidebar":"tutorialSidebar"},"installation/event-logging":{"id":"installation/event-logging","title":"Event Logging","description":"Logging","sidebar":"tutorialSidebar"},"installation/installing-superset-from-scratch":{"id":"installation/installing-superset-from-scratch","title":"Installing From Scratch","description":"Installing Superset from Scratch","sidebar":"tutorialSidebar"},"installation/installing-superset-using-docker-compose":{"id":"installation/installing-superset-using-docker-compose","title":"Installing Locally Using Docker Compose","description":"Installing Superset Locally Using Docker Compose","sidebar":"tutorialSidebar"},"installation/networking-settings":{"id":"installation/networking-settings","title":"Additional Networking Settings","description":"Additional Networking Settings","sidebar":"tutorialSidebar"},"installation/running-on-kubernetes":{"id":"installation/running-on-kubernetes","title":"Installing on Kubernetes","description":"Installing on Kubernetes","sidebar":"tutorialSidebar"},"installation/setup-ssh-tunneling":{"id":"installation/setup-ssh-tunneling","title":"Setup SSH Tunneling","description":"SSH Tunneling","sidebar":"tutorialSidebar"},"installation/sql-templating":{"id":"installation/sql-templating","title":"SQL Templating","description":"SQL Templating","sidebar":"tutorialSidebar"},"installation/upgrading-superset":{"id":"installation/upgrading-superset","title":"Upgrading Superset","description":"Upgrading Superset","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Introduction","description":"What is Apache Superset?","sidebar":"tutorialSidebar"},"miscellaneous/chart-params":{"id":"miscellaneous/chart-params","title":"Chart Parameters Reference","description":"Chart Parameters","sidebar":"tutorialSidebar"},"miscellaneous/country-map-tools":{"id":"miscellaneous/country-map-tools","title":"Country Map Tools","description":"The Country Map Visualization","sidebar":"tutorialSidebar"},"miscellaneous/importing-exporting-datasources":{"id":"miscellaneous/importing-exporting-datasources","title":"Importing and Exporting Datasources","description":"Importing and Exporting Datasources","sidebar":"tutorialSidebar"},"miscellaneous/issue-codes":{"id":"miscellaneous/issue-codes","title":"Issue Codes","description":"This page lists issue codes that may be displayed in","sidebar":"tutorialSidebar"},"miscellaneous/native-filter-migration":{"id":"miscellaneous/native-filter-migration","title":"Migrating from Legacy to Native Filters","description":"The superset native-filters CLI command group\u2014somewhat akin to an Alembic migration\u2014","sidebar":"tutorialSidebar"},"miscellaneous/timezones":{"id":"miscellaneous/timezones","title":"Timezones","description":"Timezones","sidebar":"tutorialSidebar"},"security/cves":{"id":"security/cves","title":"CVEs by release","description":"Version 2.1.1","sidebar":"tutorialSidebar"},"security/security":{"id":"security/security","title":"Security","description":"Authentication and authorization in Superset is handled by Flask AppBuilder (FAB), an application development framework","sidebar":"tutorialSidebar"}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/runtime~main.5a2615c1.js b/assets/js/runtime~main.da047873.js
similarity index 98%
rename from assets/js/runtime~main.5a2615c1.js
rename to assets/js/runtime~main.da047873.js
index a7ddd43..211d1aa 100644
--- a/assets/js/runtime~main.5a2615c1.js
+++ b/assets/js/runtime~main.da047873.js
@@ -1 +1 @@
-(()=>{"use strict";var e,a,c,f,d,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=b,r.c=t,e=[],r.O=(a,c,f,d)=>{if(!c){var b=1/0;for(i=0;i<e.length;i++){c=e[i][0],f=e[i][1],d=e[i][2];for(var t=!0,o=0;o<c.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,d<b&&(b=d));if(t){e.splice(i--,1);var n=f();void 0!==n&&(a=n)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,f,d]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(d,b),d},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",112:"afef705c",229:"25f17725",340:"070b53d1",396:"0ae8b3d4",515:"53bb5fc4",599:"3c585fdb",674:"67158350",742:"dd0670d3",907:"c1424005",1083:"bd23e567",1444:"69a4ab96",1533:"6edc47f3",1964:"5e15fec9",2331:"19682bb8",2429:"d5417e33",2942:"eb23a929",3085:"1f391b9e",3206:"f8409a7e",3237:"1df93b7f",3628:"fa1a3aa0",3672:"cf6ffe2f",3775:"496bf018",3821:"21b4b958",3909:"cd90435d",3945:"a309f86e",3996:"9791fd42",4003:"6432bc55",4014:"5e50ba72",4096:"c76f729d",4244:"4cc2c078",4281:"1c734f75",4343:"18cf5ace",4490:"262418cd",4519:"2c412ea7",4586:"dc3fdd24",4628:"1ce51947",4729:"0c21af39",4745:"30ec1363",4796:"471df853",4992:"dc737160",5097:"a584ba2a",5114:"5ea65e65",5324:"a9e1a7f6",5542:"729f57ad",5551:"da60bc8f",5643:"30334fcd",5720:"30256b0d",5851:"8660bbc8",5906:"e7c796a6",6126:"e0a8f778",6230:"2bafca50",6455:"4e664dc4",6547:"1c42a294",6552:"6948bca1",6849:"57b59cd4",6860:"dbb131dd",7107:"d76e6194",7251:"9d6fd8ea",7271:"6a90d500",7285:"b92f705c",7380:"640bc8a0",7414:"393be207",7566:"972382ea",7587:"3ec2c3f7",7600:"2461ffa2",7706:"ce3fa444",7886:"5818c28e",7918:"17896441",7920:"1a4e3797",7937:"9a9c044b",8005:"600a9360",8015:"0e9953cd",8342:"eb3b0997",8402:"3c835dee",8561:"07f0ce13",8597:"f4a6e698",8718:"31e90f3c",8784:"35a5de3c",8835:"36ea7a08",8844:"b46ab14b",8853:"c296437a",8860:"71cf7fe6",8888:"ee5d850a",8915:"f9cc156b",9243:"40974919",9317:"f5f07875",9514:"1be78505",9594:"507542a3",9596:"88eaec5a",9609:"58160c0b",9617:"d83b78fc",9623:"904d61ef",9822:"fe0957ee"}[e]||e)+"."+{53:"f934fa77",112:"358a028d",229:"382b9496",340:"75523673",396:"e41dcf26",515:"d6fdf9a0",599:"ef01a5ad",674:"a3276773",713:"e8404ec1",742:"d68d210e",907:"df948777",975:"d95e9177",1083:"dc758238",1273:"c177fe37",1444:"8e098be3",1529:"cb77c953",1533:"74bc8988",1964:"bc80b38a",2331:"12ef5623",2387:"cf729afe",2429:"7d9140aa",2942:"7e9562fc",3085:"fabb506c",3206:"697ea5cb",3237:"bb60de38",3628:"e87e1188",3672:"2621ec01",3775:"c0c9431f",3821:"0e4bb161",3909:"99f961ac",3945:"fd5212eb",3996:"b79f756c",4003:"ace5d07c",4014:"2b277921",4096:"c85e22b7",4244:"1e2d58c9",4281:"fbd5783e",4343:"e12f7ce7",4357:"c9ab8a8e",4471:"bf33ef73",4490:"d10e768c",4519:"5753c5cd",4586:"b8268e5c",4628:"9c631359",4729:"2a013c27",4745:"6180b023",4796:"39c95442",4992:"1b73fe9a",5097:"a786479b",5114:"ffa26b77",5324:"d436de2e",5542:"f2ed3507",5551:"18262bd8",5643:"b5a32572",5720:"be106e3e",5851:"ad0f3e8d",5906:"9d01f089",5957:"4fb6e613",6126:"c43c04dc",6230:"7f7fb7ca",6455:"426e997b",6547:"6bff09cc",6552:"cde86692",6780:"ba84af4e",6849:"6dca875c",6860:"c82e4e25",6945:"d18f3d89",7029:"96f14d38",7107:"54d240ef",7251:"9ebcbca9",7271:"5d70da37",7285:"f7bd038b",7380:"2f6a629a",7414:"20dae7da",7566:"391f2ca7",7587:"6f37a44b",7600:"43c28611",7706:"62a49085",7886:"56d86c2e",7918:"156729cb",7920:"8a952348",7937:"9da8e8a6",8005:"0b984638",8015:"6d25c537",8342:"47b0e1a4",8402:"63cab2ea",8561:"4aefae82",8597:"891ffbff",8718:"a0004b49",8784:"cc424d0a",8835:"b650668e",8844:"0b23475f",8853:"7dc8f3c7",8860:"7dc81586",8888:"28a37eb6",8915:"ea4252e6",9169:"36534697",9243:"a133cd88",9317:"56314c09",9514:"bfe07248",9594:"e5fff5b5",9596:"0ba04755",9609:"0078e71d",9617:"4bd95169",9623:"107093cb",9822:"f71b66b9"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},d="docs-v-2:",r.l=(e,a,c,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==d+c){t=l;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",d+c),t.src=e),f[e]=[a];var u=(a,c)=>{t.onerror=t.onload=null,clearTimeout(s);var d=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(c))),a)return a(c)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={17896441:"7918",40974919:"9243",67158350:"674","935f2afb":"53",afef705c:"112","25f17725":"229","070b53d1":"340","0ae8b3d4":"396","53bb5fc4":"515","3c585fdb":"599",dd0670d3:"742",c1424005:"907",bd23e567:"1083","69a4ab96":"1444","6edc47f3":"1533","5e15fec9":"1964","19682bb8":"2331",d5417e33:"2429",eb23a929:"2942","1f391b9e":"3085",f8409a7e:"3206","1df93b7f":"3237",fa1a3aa0:"3628",cf6ffe2f:"3672","496bf018":"3775","21b4b958":"3821",cd90435d:"3909",a309f86e:"3945","9791fd42":"3996","6432bc55":"4003","5e50ba72":"4014",c76f729d:"4096","4cc2c078":"4244","1c734f75":"4281","18cf5ace":"4343","262418cd":"4490","2c412ea7":"4519",dc3fdd24:"4586","1ce51947":"4628","0c21af39":"4729","30ec1363":"4745","471df853":"4796",dc737160:"4992",a584ba2a:"5097","5ea65e65":"5114",a9e1a7f6:"5324","729f57ad":"5542",da60bc8f:"5551","30334fcd":"5643","30256b0d":"5720","8660bbc8":"5851",e7c796a6:"5906",e0a8f778:"6126","2bafca50":"6230","4e664dc4":"6455","1c42a294":"6547","6948bca1":"6552","57b59cd4":"6849",dbb131dd:"6860",d76e6194:"7107","9d6fd8ea":"7251","6a90d500":"7271",b92f705c:"7285","640bc8a0":"7380","393be207":"7414","972382ea":"7566","3ec2c3f7":"7587","2461ffa2":"7600",ce3fa444:"7706","5818c28e":"7886","1a4e3797":"7920","9a9c044b":"7937","600a9360":"8005","0e9953cd":"8015",eb3b0997:"8342","3c835dee":"8402","07f0ce13":"8561",f4a6e698:"8597","31e90f3c":"8718","35a5de3c":"8784","36ea7a08":"8835",b46ab14b:"8844",c296437a:"8853","71cf7fe6":"8860",ee5d850a:"8888",f9cc156b:"8915",f5f07875:"9317","1be78505":"9514","507542a3":"9594","88eaec5a":"9596","58160c0b":"9609",d83b78fc:"9617","904d61ef":"9623",fe0957ee:"9822"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,c)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var d=new Promise(((c,d)=>f=e[a]=[c,d]));c.push(f[2]=d);var b=r.p+r.u(a),t=new Error;r.l(b,(c=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var d=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,f[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var f,d,b=c[0],t=c[1],o=c[2],n=0;if(b.some((a=>0!==e[a]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(c);n<b.length;n++)d=b[n],r.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return r.O(i)},c=self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[];c.forEach(a.bind(null,0)),c.push=a.bind(null,c.push.bind(c))})()})();
\ No newline at end of file
+(()=>{"use strict";var e,a,c,f,d,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=b,r.c=t,e=[],r.O=(a,c,f,d)=>{if(!c){var b=1/0;for(i=0;i<e.length;i++){c=e[i][0],f=e[i][1],d=e[i][2];for(var t=!0,o=0;o<c.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,d<b&&(b=d));if(t){e.splice(i--,1);var n=f();void 0!==n&&(a=n)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,f,d]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(d,b),d},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",112:"afef705c",229:"25f17725",340:"070b53d1",396:"0ae8b3d4",515:"53bb5fc4",599:"3c585fdb",674:"67158350",742:"dd0670d3",907:"c1424005",1083:"bd23e567",1444:"69a4ab96",1533:"6edc47f3",1964:"5e15fec9",2331:"19682bb8",2429:"d5417e33",2942:"eb23a929",3085:"1f391b9e",3206:"f8409a7e",3237:"1df93b7f",3628:"fa1a3aa0",3672:"cf6ffe2f",3775:"496bf018",3821:"21b4b958",3909:"cd90435d",3945:"a309f86e",3996:"9791fd42",4003:"6432bc55",4014:"5e50ba72",4096:"c76f729d",4244:"4cc2c078",4281:"1c734f75",4343:"18cf5ace",4490:"262418cd",4519:"2c412ea7",4586:"dc3fdd24",4628:"1ce51947",4729:"0c21af39",4745:"30ec1363",4796:"471df853",4992:"dc737160",5097:"a584ba2a",5114:"5ea65e65",5324:"a9e1a7f6",5542:"729f57ad",5551:"da60bc8f",5643:"30334fcd",5720:"30256b0d",5851:"8660bbc8",5906:"e7c796a6",6126:"e0a8f778",6230:"2bafca50",6455:"4e664dc4",6547:"1c42a294",6552:"6948bca1",6849:"57b59cd4",6860:"dbb131dd",7107:"d76e6194",7251:"9d6fd8ea",7271:"6a90d500",7285:"b92f705c",7380:"640bc8a0",7414:"393be207",7566:"972382ea",7587:"3ec2c3f7",7600:"2461ffa2",7706:"ce3fa444",7886:"5818c28e",7918:"17896441",7920:"1a4e3797",7937:"9a9c044b",8005:"600a9360",8015:"0e9953cd",8342:"eb3b0997",8402:"3c835dee",8561:"07f0ce13",8597:"f4a6e698",8718:"31e90f3c",8784:"35a5de3c",8835:"36ea7a08",8844:"b46ab14b",8853:"c296437a",8860:"71cf7fe6",8888:"ee5d850a",8915:"f9cc156b",9243:"40974919",9317:"f5f07875",9514:"1be78505",9594:"507542a3",9596:"88eaec5a",9609:"58160c0b",9617:"d83b78fc",9623:"904d61ef",9822:"fe0957ee"}[e]||e)+"."+{53:"d76597f4",112:"358a028d",229:"382b9496",340:"75523673",396:"e41dcf26",515:"d6fdf9a0",599:"ef01a5ad",674:"a3276773",713:"e8404ec1",742:"d68d210e",907:"df948777",975:"d95e9177",1083:"dc758238",1273:"c177fe37",1444:"8e098be3",1529:"cb77c953",1533:"74bc8988",1964:"bc80b38a",2331:"12ef5623",2387:"cf729afe",2429:"7d9140aa",2942:"7e9562fc",3085:"fabb506c",3206:"697ea5cb",3237:"bb60de38",3628:"e87e1188",3672:"2621ec01",3775:"c0c9431f",3821:"0e4bb161",3909:"99f961ac",3945:"fd5212eb",3996:"b79f756c",4003:"ace5d07c",4014:"2b277921",4096:"c85e22b7",4244:"1e2d58c9",4281:"fbd5783e",4343:"e12f7ce7",4357:"c9ab8a8e",4471:"bf33ef73",4490:"d10e768c",4519:"5753c5cd",4586:"b8268e5c",4628:"9c631359",4729:"2a013c27",4745:"e8758441",4796:"39c95442",4992:"1b73fe9a",5097:"a786479b",5114:"ffa26b77",5324:"d436de2e",5542:"f2ed3507",5551:"18262bd8",5643:"b5a32572",5720:"be106e3e",5851:"ad0f3e8d",5906:"9d01f089",5957:"4fb6e613",6126:"c43c04dc",6230:"7f7fb7ca",6455:"426e997b",6547:"6bff09cc",6552:"cde86692",6780:"ba84af4e",6849:"6dca875c",6860:"c82e4e25",6945:"d18f3d89",7029:"96f14d38",7107:"54d240ef",7251:"9ebcbca9",7271:"5d70da37",7285:"f7bd038b",7380:"2f6a629a",7414:"20dae7da",7566:"391f2ca7",7587:"6f37a44b",7600:"43c28611",7706:"62a49085",7886:"56d86c2e",7918:"156729cb",7920:"8a952348",7937:"9da8e8a6",8005:"0b984638",8015:"6d25c537",8342:"47b0e1a4",8402:"63cab2ea",8561:"4aefae82",8597:"891ffbff",8718:"a0004b49",8784:"cc424d0a",8835:"b650668e",8844:"0b23475f",8853:"7dc8f3c7",8860:"7dc81586",8888:"28a37eb6",8915:"ea4252e6",9169:"36534697",9243:"a133cd88",9317:"56314c09",9514:"bfe07248",9594:"e5fff5b5",9596:"0ba04755",9609:"0078e71d",9617:"4bd95169",9623:"107093cb",9822:"f71b66b9"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},d="docs-v-2:",r.l=(e,a,c,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==d+c){t=l;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",d+c),t.src=e),f[e]=[a];var u=(a,c)=>{t.onerror=t.onload=null,clearTimeout(s);var d=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(c))),a)return a(c)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={17896441:"7918",40974919:"9243",67158350:"674","935f2afb":"53",afef705c:"112","25f17725":"229","070b53d1":"340","0ae8b3d4":"396","53bb5fc4":"515","3c585fdb":"599",dd0670d3:"742",c1424005:"907",bd23e567:"1083","69a4ab96":"1444","6edc47f3":"1533","5e15fec9":"1964","19682bb8":"2331",d5417e33:"2429",eb23a929:"2942","1f391b9e":"3085",f8409a7e:"3206","1df93b7f":"3237",fa1a3aa0:"3628",cf6ffe2f:"3672","496bf018":"3775","21b4b958":"3821",cd90435d:"3909",a309f86e:"3945","9791fd42":"3996","6432bc55":"4003","5e50ba72":"4014",c76f729d:"4096","4cc2c078":"4244","1c734f75":"4281","18cf5ace":"4343","262418cd":"4490","2c412ea7":"4519",dc3fdd24:"4586","1ce51947":"4628","0c21af39":"4729","30ec1363":"4745","471df853":"4796",dc737160:"4992",a584ba2a:"5097","5ea65e65":"5114",a9e1a7f6:"5324","729f57ad":"5542",da60bc8f:"5551","30334fcd":"5643","30256b0d":"5720","8660bbc8":"5851",e7c796a6:"5906",e0a8f778:"6126","2bafca50":"6230","4e664dc4":"6455","1c42a294":"6547","6948bca1":"6552","57b59cd4":"6849",dbb131dd:"6860",d76e6194:"7107","9d6fd8ea":"7251","6a90d500":"7271",b92f705c:"7285","640bc8a0":"7380","393be207":"7414","972382ea":"7566","3ec2c3f7":"7587","2461ffa2":"7600",ce3fa444:"7706","5818c28e":"7886","1a4e3797":"7920","9a9c044b":"7937","600a9360":"8005","0e9953cd":"8015",eb3b0997:"8342","3c835dee":"8402","07f0ce13":"8561",f4a6e698:"8597","31e90f3c":"8718","35a5de3c":"8784","36ea7a08":"8835",b46ab14b:"8844",c296437a:"8853","71cf7fe6":"8860",ee5d850a:"8888",f9cc156b:"8915",f5f07875:"9317","1be78505":"9514","507542a3":"9594","88eaec5a":"9596","58160c0b":"9609",d83b78fc:"9617","904d61ef":"9623",fe0957ee:"9822"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,c)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var d=new Promise(((c,d)=>f=e[a]=[c,d]));c.push(f[2]=d);var b=r.p+r.u(a),t=new Error;r.l(b,(c=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var d=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,f[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var f,d,b=c[0],t=c[1],o=c[2],n=0;if(b.some((a=>0!==e[a]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(c);n<b.length;n++)d=b[n],r.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return r.O(i)},c=self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[];c.forEach(a.bind(null,0)),c.push=a.bind(null,c.push.bind(c))})()})();
\ No newline at end of file
diff --git a/community/index.html b/community/index.html
index ddbfcdb..5232fbe 100644
--- a/community/index.html
+++ b/community/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/api/index.html b/docs/api/index.html
index b4737b4..7090227 100644
--- a/docs/api/index.html
+++ b/docs/api/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -48,7 +48,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/contributing-page/index.html b/docs/contributing/contributing-page/index.html
index aa3fac1..bf29c8a 100644
--- a/docs/contributing/contributing-page/index.html
+++ b/docs/contributing/contributing-page/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/conventions-and-typing/index.html b/docs/contributing/conventions-and-typing/index.html
index aa70451..56085e0 100644
--- a/docs/contributing/conventions-and-typing/index.html
+++ b/docs/contributing/conventions-and-typing/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -49,7 +49,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/creating-viz-plugins/index.html b/docs/contributing/creating-viz-plugins/index.html
index ad6e636..c0f5e9c 100644
--- a/docs/contributing/creating-viz-plugins/index.html
+++ b/docs/contributing/creating-viz-plugins/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -61,7 +61,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/hooks-and-linting/index.html b/docs/contributing/hooks-and-linting/index.html
index 9846214..31197e9 100644
--- a/docs/contributing/hooks-and-linting/index.html
+++ b/docs/contributing/hooks-and-linting/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/local-backend/index.html b/docs/contributing/local-backend/index.html
index 8b0bcf3..30f3a86 100644
--- a/docs/contributing/local-backend/index.html
+++ b/docs/contributing/local-backend/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -48,7 +48,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/pull-request-guidelines/index.html b/docs/contributing/pull-request-guidelines/index.html
index 996ef73..ecf36df 100644
--- a/docs/contributing/pull-request-guidelines/index.html
+++ b/docs/contributing/pull-request-guidelines/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/style-guide/index.html b/docs/contributing/style-guide/index.html
index 9db7489..b10c79d 100644
--- a/docs/contributing/style-guide/index.html
+++ b/docs/contributing/style-guide/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -48,7 +48,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/testing-locally/index.html b/docs/contributing/testing-locally/index.html
index e2c3010..c749465 100644
--- a/docs/contributing/testing-locally/index.html
+++ b/docs/contributing/testing-locally/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -52,7 +52,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/translations/index.html b/docs/contributing/translations/index.html
index 6a53003..c996f56 100644
--- a/docs/contributing/translations/index.html
+++ b/docs/contributing/translations/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -76,7 +76,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/types-of-contributions/index.html b/docs/contributing/types-of-contributions/index.html
index 7a8395f..8b6fde3 100644
--- a/docs/contributing/types-of-contributions/index.html
+++ b/docs/contributing/types-of-contributions/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -56,7 +56,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/creating-charts-dashboards/creating-your-first-dashboard/index.html b/docs/creating-charts-dashboards/creating-your-first-dashboard/index.html
index 918ec55..a2164b2 100644
--- a/docs/creating-charts-dashboards/creating-your-first-dashboard/index.html
+++ b/docs/creating-charts-dashboards/creating-your-first-dashboard/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -88,7 +88,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/creating-charts-dashboards/exploring-data/index.html b/docs/creating-charts-dashboards/exploring-data/index.html
index 15991ca..2e053ad 100644
--- a/docs/creating-charts-dashboards/exploring-data/index.html
+++ b/docs/creating-charts-dashboards/exploring-data/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -150,7 +150,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/ascend/index.html b/docs/databases/ascend/index.html
index 0ea28bd..d8759bd 100644
--- a/docs/databases/ascend/index.html
+++ b/docs/databases/ascend/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/athena/index.html b/docs/databases/athena/index.html
index fa6a569..28cedb8 100644
--- a/docs/databases/athena/index.html
+++ b/docs/databases/athena/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/bigquery/index.html b/docs/databases/bigquery/index.html
index f2bba73..1ab5fb6 100644
--- a/docs/databases/bigquery/index.html
+++ b/docs/databases/bigquery/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -52,7 +52,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/clickhouse/index.html b/docs/databases/clickhouse/index.html
index 8dabb26..dd425c3 100644
--- a/docs/databases/clickhouse/index.html
+++ b/docs/databases/clickhouse/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/cockroachdb/index.html b/docs/databases/cockroachdb/index.html
index 4ca0b98..b22a36a 100644
--- a/docs/databases/cockroachdb/index.html
+++ b/docs/databases/cockroachdb/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/cratedb/index.html b/docs/databases/cratedb/index.html
index 40a2520..7d5daad 100644
--- a/docs/databases/cratedb/index.html
+++ b/docs/databases/cratedb/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -49,7 +49,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/databricks/index.html b/docs/databases/databricks/index.html
index 05e6ab6..e3beaff 100644
--- a/docs/databases/databricks/index.html
+++ b/docs/databases/databricks/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/db-connection-ui/index.html b/docs/databases/db-connection-ui/index.html
index 2e2ecd4..3fc2397 100644
--- a/docs/databases/db-connection-ui/index.html
+++ b/docs/databases/db-connection-ui/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/docker-add-drivers/index.html b/docs/databases/docker-add-drivers/index.html
index 3972a13..d9d53e7 100644
--- a/docs/databases/docker-add-drivers/index.html
+++ b/docs/databases/docker-add-drivers/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -60,7 +60,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/dremio/index.html b/docs/databases/dremio/index.html
index 1143de1..6b5253f 100644
--- a/docs/databases/dremio/index.html
+++ b/docs/databases/dremio/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/drill/index.html b/docs/databases/drill/index.html
index 5dee19b..c2761c0 100644
--- a/docs/databases/drill/index.html
+++ b/docs/databases/drill/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -52,7 +52,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/druid/index.html b/docs/databases/druid/index.html
index 8c30b78..3eed204 100644
--- a/docs/databases/druid/index.html
+++ b/docs/databases/druid/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -58,7 +58,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/dynamodb/index.html b/docs/databases/dynamodb/index.html
index 34c4af2..f9dc747 100644
--- a/docs/databases/dynamodb/index.html
+++ b/docs/databases/dynamodb/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/elasticsearch/index.html b/docs/databases/elasticsearch/index.html
index 8fdbe2b..e27a2d7 100644
--- a/docs/databases/elasticsearch/index.html
+++ b/docs/databases/elasticsearch/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -52,7 +52,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/exasol/index.html b/docs/databases/exasol/index.html
index c0f8beb..f8be6c4 100644
--- a/docs/databases/exasol/index.html
+++ b/docs/databases/exasol/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/extra-settings/index.html b/docs/databases/extra-settings/index.html
index e0c58d3..ffd402b 100644
--- a/docs/databases/extra-settings/index.html
+++ b/docs/databases/extra-settings/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -55,7 +55,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/firebird/index.html b/docs/databases/firebird/index.html
index 5badc8c..e67801c 100644
--- a/docs/databases/firebird/index.html
+++ b/docs/databases/firebird/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/firebolt/index.html b/docs/databases/firebolt/index.html
index 31ec675..06a4642 100644
--- a/docs/databases/firebolt/index.html
+++ b/docs/databases/firebolt/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/google-sheets/index.html b/docs/databases/google-sheets/index.html
index 7ba4ce9..bf85baa 100644
--- a/docs/databases/google-sheets/index.html
+++ b/docs/databases/google-sheets/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -49,7 +49,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/hana/index.html b/docs/databases/hana/index.html
index ee361f4..4b879e0 100644
--- a/docs/databases/hana/index.html
+++ b/docs/databases/hana/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/hive/index.html b/docs/databases/hive/index.html
index 4408d7d..7257af9 100644
--- a/docs/databases/hive/index.html
+++ b/docs/databases/hive/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/hologres/index.html b/docs/databases/hologres/index.html
index cda538a..5d1c452 100644
--- a/docs/databases/hologres/index.html
+++ b/docs/databases/hologres/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/ibm-db2/index.html b/docs/databases/ibm-db2/index.html
index 0cc9e62..2c72eea 100644
--- a/docs/databases/ibm-db2/index.html
+++ b/docs/databases/ibm-db2/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/impala/index.html b/docs/databases/impala/index.html
index 557aa6c..b00c229 100644
--- a/docs/databases/impala/index.html
+++ b/docs/databases/impala/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/installing-database-drivers/index.html b/docs/databases/installing-database-drivers/index.html
index 3cfc4e4..283697e 100644
--- a/docs/databases/installing-database-drivers/index.html
+++ b/docs/databases/installing-database-drivers/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -56,7 +56,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/kusto/index.html b/docs/databases/kusto/index.html
index 78e57cc..b60f6a5 100644
--- a/docs/databases/kusto/index.html
+++ b/docs/databases/kusto/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/kylin/index.html b/docs/databases/kylin/index.html
index a6709ae..8ad4230 100644
--- a/docs/databases/kylin/index.html
+++ b/docs/databases/kylin/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/meta-database/index.html b/docs/databases/meta-database/index.html
index 9016a1d..2066885 100644
--- a/docs/databases/meta-database/index.html
+++ b/docs/databases/meta-database/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/mysql/index.html b/docs/databases/mysql/index.html
index 0edb541..5c20f1a 100644
--- a/docs/databases/mysql/index.html
+++ b/docs/databases/mysql/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/netezza/index.html b/docs/databases/netezza/index.html
index 8ac8fb9..cde96d1 100644
--- a/docs/databases/netezza/index.html
+++ b/docs/databases/netezza/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/ocient/index.html b/docs/databases/ocient/index.html
index c09508f..1358763 100644
--- a/docs/databases/ocient/index.html
+++ b/docs/databases/ocient/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/oracle/index.html b/docs/databases/oracle/index.html
index a552375..fb5e4f2 100644
--- a/docs/databases/oracle/index.html
+++ b/docs/databases/oracle/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/pinot/index.html b/docs/databases/pinot/index.html
index 208b30a..c5fc8f5 100644
--- a/docs/databases/pinot/index.html
+++ b/docs/databases/pinot/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/postgres/index.html b/docs/databases/postgres/index.html
index 62e90ae..c525834 100644
--- a/docs/databases/postgres/index.html
+++ b/docs/databases/postgres/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -50,7 +50,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/presto/index.html b/docs/databases/presto/index.html
index c770e68..ecd934a 100644
--- a/docs/databases/presto/index.html
+++ b/docs/databases/presto/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/redshift/index.html b/docs/databases/redshift/index.html
index 057a159..eca4976 100644
--- a/docs/databases/redshift/index.html
+++ b/docs/databases/redshift/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/risingwave/index.html b/docs/databases/risingwave/index.html
index 71c89b1..b55e489 100644
--- a/docs/databases/risingwave/index.html
+++ b/docs/databases/risingwave/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/rockset/index.html b/docs/databases/rockset/index.html
index e5fde84..9c0e888 100644
--- a/docs/databases/rockset/index.html
+++ b/docs/databases/rockset/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/snowflake/index.html b/docs/databases/snowflake/index.html
index 923b44e..931c0a3 100644
--- a/docs/databases/snowflake/index.html
+++ b/docs/databases/snowflake/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -55,7 +55,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/solr/index.html b/docs/databases/solr/index.html
index 1ba2dc8..b62b6f4 100644
--- a/docs/databases/solr/index.html
+++ b/docs/databases/solr/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/spark-sql/index.html b/docs/databases/spark-sql/index.html
index f60c56d..f7a5e85 100644
--- a/docs/databases/spark-sql/index.html
+++ b/docs/databases/spark-sql/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/sql-server/index.html b/docs/databases/sql-server/index.html
index 9f2260f..c3711c6 100644
--- a/docs/databases/sql-server/index.html
+++ b/docs/databases/sql-server/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/starrocks/index.html b/docs/databases/starrocks/index.html
index 650444c..267bb17 100644
--- a/docs/databases/starrocks/index.html
+++ b/docs/databases/starrocks/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/teradata/index.html b/docs/databases/teradata/index.html
index 40128d0..62fec5f 100644
--- a/docs/databases/teradata/index.html
+++ b/docs/databases/teradata/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -52,7 +52,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/timescaledb/index.html b/docs/databases/timescaledb/index.html
index a947869..faac1b5 100644
--- a/docs/databases/timescaledb/index.html
+++ b/docs/databases/timescaledb/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/trino/index.html b/docs/databases/trino/index.html
index 33b853e..70dd8ac 100644
--- a/docs/databases/trino/index.html
+++ b/docs/databases/trino/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/vertica/index.html b/docs/databases/vertica/index.html
index e0b38e6..a71b14c 100644
--- a/docs/databases/vertica/index.html
+++ b/docs/databases/vertica/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/yugabytedb/index.html b/docs/databases/yugabytedb/index.html
index 5e21ff0..c90fe8b 100644
--- a/docs/databases/yugabytedb/index.html
+++ b/docs/databases/yugabytedb/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/frequently-asked-questions/index.html b/docs/frequently-asked-questions/index.html
index defea35..e98def2 100644
--- a/docs/frequently-asked-questions/index.html
+++ b/docs/frequently-asked-questions/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -131,7 +131,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/alerts-reports/index.html b/docs/installation/alerts-reports/index.html
index d7394b0..b5ad6cb 100644
--- a/docs/installation/alerts-reports/index.html
+++ b/docs/installation/alerts-reports/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -64,7 +64,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/async-queries-celery/index.html b/docs/installation/async-queries-celery/index.html
index de422fd..a6f7811 100644
--- a/docs/installation/async-queries-celery/index.html
+++ b/docs/installation/async-queries-celery/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -61,7 +61,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/cache/index.html b/docs/installation/cache/index.html
index 792bbbd..eb71179 100644
--- a/docs/installation/cache/index.html
+++ b/docs/installation/cache/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -64,7 +64,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/configuring-superset/index.html b/docs/installation/configuring-superset/index.html
index 9b1b186..73deb1b 100644
--- a/docs/installation/configuring-superset/index.html
+++ b/docs/installation/configuring-superset/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -98,7 +98,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/event-logging/index.html b/docs/installation/event-logging/index.html
index e092d23..948c833 100644
--- a/docs/installation/event-logging/index.html
+++ b/docs/installation/event-logging/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -51,7 +51,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/installing-superset-from-scratch/index.html b/docs/installation/installing-superset-from-scratch/index.html
index 494c166..39a0cdc 100644
--- a/docs/installation/installing-superset-from-scratch/index.html
+++ b/docs/installation/installing-superset-from-scratch/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -56,7 +56,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/installing-superset-using-docker-compose/index.html b/docs/installation/installing-superset-using-docker-compose/index.html
index c966234..ab8d5e0 100644
--- a/docs/installation/installing-superset-using-docker-compose/index.html
+++ b/docs/installation/installing-superset-using-docker-compose/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -71,7 +71,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/networking-settings/index.html b/docs/installation/networking-settings/index.html
index bd84474..aa2ffa8 100644
--- a/docs/installation/networking-settings/index.html
+++ b/docs/installation/networking-settings/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -55,7 +55,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/running-on-kubernetes/index.html b/docs/installation/running-on-kubernetes/index.html
index b116892..610da13 100644
--- a/docs/installation/running-on-kubernetes/index.html
+++ b/docs/installation/running-on-kubernetes/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -53,7 +53,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/setup-ssh-tunneling/index.html b/docs/installation/setup-ssh-tunneling/index.html
index ff57a6f..3b69ad4 100644
--- a/docs/installation/setup-ssh-tunneling/index.html
+++ b/docs/installation/setup-ssh-tunneling/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/sql-templating/index.html b/docs/installation/sql-templating/index.html
index e87726d..aa75830 100644
--- a/docs/installation/sql-templating/index.html
+++ b/docs/installation/sql-templating/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -80,7 +80,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/upgrading-superset/index.html b/docs/installation/upgrading-superset/index.html
index 6d158c7..d4ee911 100644
--- a/docs/installation/upgrading-superset/index.html
+++ b/docs/installation/upgrading-superset/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/intro/index.html b/docs/intro/index.html
index 7994d0e..6a90356 100644
--- a/docs/intro/index.html
+++ b/docs/intro/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -57,7 +57,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/chart-params/index.html b/docs/miscellaneous/chart-params/index.html
index a760741..2aa0519 100644
--- a/docs/miscellaneous/chart-params/index.html
+++ b/docs/miscellaneous/chart-params/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/country-map-tools/index.html b/docs/miscellaneous/country-map-tools/index.html
index 9acad2a..01b161f 100644
--- a/docs/miscellaneous/country-map-tools/index.html
+++ b/docs/miscellaneous/country-map-tools/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -51,7 +51,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/importing-exporting-datasources/index.html b/docs/miscellaneous/importing-exporting-datasources/index.html
index 3415861..6989f5b 100644
--- a/docs/miscellaneous/importing-exporting-datasources/index.html
+++ b/docs/miscellaneous/importing-exporting-datasources/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -56,7 +56,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/issue-codes/index.html b/docs/miscellaneous/issue-codes/index.html
index 7d7cf5a..36f1634 100644
--- a/docs/miscellaneous/issue-codes/index.html
+++ b/docs/miscellaneous/issue-codes/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -74,7 +74,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/native-filter-migration/index.html b/docs/miscellaneous/native-filter-migration/index.html
index 1379f35..fe1e04b 100644
--- a/docs/miscellaneous/native-filter-migration/index.html
+++ b/docs/miscellaneous/native-filter-migration/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -63,7 +63,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/timezones/index.html b/docs/miscellaneous/timezones/index.html
index bd7242e..5713e4d 100644
--- a/docs/miscellaneous/timezones/index.html
+++ b/docs/miscellaneous/timezones/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/security/cves/index.html b/docs/security/cves/index.html
index 926534c..8d0a9dd 100644
--- a/docs/security/cves/index.html
+++ b/docs/security/cves/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/security/index.html b/docs/security/index.html
index a610afb..2722377 100644
--- a/docs/security/index.html
+++ b/docs/security/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.1">
-<title data-rh="true">Security | Superset</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://superset.apache.org/docs/security/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Security | Superset"><meta data-rh="true" name="description" content="Security in Superset is handled by Flask AppBuilder (FAB), an application development framework"><meta data-rh="true" property="og:description" content="Security in Superset is handled by Flask AppBuilder (FAB), an application development framework"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://superset.apache.org/docs/security/"><link data-rh="true" rel="alternate" href="https://superset.apache.org/docs/security/" hreflang="en"><link data-rh="true" rel="alternate" href="https://superset.apache.org/docs/security/" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://WR5FASX5ED-dsn.algolia.net" crossorigin="anonymous"><link rel="preconnect" href="https://www.google-analytics.com">
+<title data-rh="true">Security | Superset</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://superset.apache.org/docs/security/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Security | Superset"><meta data-rh="true" name="description" content="Authentication and authorization in Superset is handled by Flask AppBuilder (FAB), an application development framework"><meta data-rh="true" property="og:description" content="Authentication and authorization in Superset is handled by Flask AppBuilder (FAB), an application development framework"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://superset.apache.org/docs/security/"><link data-rh="true" rel="alternate" href="https://superset.apache.org/docs/security/" hreflang="en"><link data-rh="true" rel="alternate" href="https://superset.apache.org/docs/security/" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://WR5FASX5ED-dsn.algolia.net" crossorigin="anonymous"><link rel="preconnect" href="https://www.google-analytics.com">
 <script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)},ga.l=+new Date,ga("create","G-133LHD3B3N","auto"),ga("set","anonymizeIp",!0),ga("send","pageview")</script>
 <script async src="https://www.google-analytics.com/analytics.js"></script>
 <link rel="preconnect" href="https://www.google-analytics.com">
@@ -18,12 +18,12 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/superset-logo-horiz.svg" alt="Superset Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/superset-logo-horiz-dark.svg" alt="Superset Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div></a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Documentation</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/intro">Getting Started</a></li><li><a class="dropdown__link" href="/docs/frequently-asked-questions">FAQ</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community">Resources</a></li><li><a href="https://github.com/apache/superset" target="_blank" rel="noopener noreferrer" class="dropdown__link">GitHub<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="http://bit.ly/join-superset-slack" target="_blank" rel="noopener noreferrer" class="dropdown__link">Slack<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://lists.apache.org/list.html?dev@superset.apache.org" target="_blank" rel="noopener noreferrer" class="dropdown__link">Mailing List<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://stackoverflow.com/questions/tagged/superset+apache-superset" target="_blank" rel="noopener noreferrer" class="dropdown__link">Stack Overflow<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link default-button-theme get-started-button" href="/docs/intro">Get Started</a><a href="https://github.com/apache/superset" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link github-button"></a><div class="searchBox_ZlJk"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/intro">Introduction</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/installation/installing-superset-using-docker-compose">Installation and Configuration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/databases/installing-database-drivers">Connecting to Databases</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/creating-charts-dashboards/creating-your-first-dashboard">Creating Charts and Dashboards</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/miscellaneous/country-map-tools">Miscellaneous</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributing/contributing-page">Contributing</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/frequently-asked-questions">Frequently Asked Questions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/api">API</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible menu__list-item-collapsible--active"><a class="menu__link menu__link--sublist menu__link--active" aria-current="page" aria-expanded="true" href="/docs/security/">Security</a><button aria-label="Toggle the collapsible sidebar category &#x27;Security&#x27;" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/security/cves">CVEs by release</a></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Security</span><meta itemprop="position" content="1"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><p>Security in Superset is handled by Flask AppBuilder (FAB), an application development framework
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/superset-logo-horiz.svg" alt="Superset Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/superset-logo-horiz-dark.svg" alt="Superset Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div></a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Documentation</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/intro">Getting Started</a></li><li><a class="dropdown__link" href="/docs/frequently-asked-questions">FAQ</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community">Resources</a></li><li><a href="https://github.com/apache/superset" target="_blank" rel="noopener noreferrer" class="dropdown__link">GitHub<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="http://bit.ly/join-superset-slack" target="_blank" rel="noopener noreferrer" class="dropdown__link">Slack<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://lists.apache.org/list.html?dev@superset.apache.org" target="_blank" rel="noopener noreferrer" class="dropdown__link">Mailing List<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://stackoverflow.com/questions/tagged/superset+apache-superset" target="_blank" rel="noopener noreferrer" class="dropdown__link">Stack Overflow<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link default-button-theme get-started-button" href="/docs/intro">Get Started</a><a href="https://github.com/apache/superset" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link github-button"></a><div class="searchBox_ZlJk"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/intro">Introduction</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/installation/installing-superset-using-docker-compose">Installation and Configuration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/databases/installing-database-drivers">Connecting to Databases</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/creating-charts-dashboards/creating-your-first-dashboard">Creating Charts and Dashboards</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/miscellaneous/country-map-tools">Miscellaneous</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributing/contributing-page">Contributing</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/frequently-asked-questions">Frequently Asked Questions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/api">API</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible menu__list-item-collapsible--active"><a class="menu__link menu__link--sublist menu__link--active" aria-current="page" aria-expanded="true" href="/docs/security/">Security</a><button aria-label="Toggle the collapsible sidebar category &#x27;Security&#x27;" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/security/cves">CVEs by release</a></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Security</span><meta itemprop="position" content="1"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><p>Authentication and authorization in Superset is handled by Flask AppBuilder (FAB), an application development framework
 built on top of Flask. FAB provides authentication, user management, permissions and roles.
 Please read its <a href="https://flask-appbuilder.readthedocs.io/en/latest/security.html" target="_blank" rel="noopener noreferrer">Security documentation</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="provided-roles">Provided Roles<a href="#provided-roles" class="hash-link" aria-label="Direct link to Provided Roles" title="Direct link to Provided Roles">​</a></h3><p>Superset ships with a set of roles that are handled by Superset itself. You can assume
 that these roles will stay up-to-date as Superset evolves (and as you update Superset versions).</p><p>Even though <strong>Admin</strong> users have the ability, we don&#x27;t recommend altering the
@@ -42,7 +42,9 @@
 still required, meaning that you need to edit the <strong>Public</strong> role and add the public data sources to the role manually.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="managing-data-source-access-for-gamma-roles">Managing Data Source Access for Gamma Roles<a href="#managing-data-source-access-for-gamma-roles" class="hash-link" aria-label="Direct link to Managing Data Source Access for Gamma Roles" title="Direct link to Managing Data Source Access for Gamma Roles">​</a></h3><p>Here’s how to provide users access to only specific datasets. First make sure the users with
 limited access have <!-- -->[only]<!-- --> the Gamma role assigned to them. Second, create a new role (Menu -&gt; Security -&gt; List Roles) and click the + sign.</p><p>This new window allows you to give this new role a name, attribute it to users and select the
 tables in the <strong>Permissions</strong> dropdown. To select the data sources you want to associate with this role, simply click on the dropdown and use the typeahead to search for your table names.</p><p>You can then confirm with users assigned to the <strong>Gamma</strong> role that they see the
-objects (dashboards and slices) associated with the tables you just extended them.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rest-api-for-user--role-management">REST API for user &amp; role management<a href="#rest-api-for-user--role-management" class="hash-link" aria-label="Direct link to REST API for user &amp; role management" title="Direct link to REST API for user &amp; role management">​</a></h3><p>Flask-AppBuilder supports a REST API for user CRUD, but this feature is in beta and is not enabled by default in Superset.  To enable this feature, set the following in your Superset configuration:</p><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">FAB_ADD_SECURITY_API </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Once configured, the documentation for additional &quot;Security&quot; endpoints will be visible in Swagger for you to explore.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="customizing-permissions">Customizing Permissions<a href="#customizing-permissions" class="hash-link" aria-label="Direct link to Customizing Permissions" title="Direct link to Customizing Permissions">​</a></h3><p>The permissions exposed by FAB are very granular and allow for a great level of
+objects (dashboards and slices) associated with the tables you just extended them.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rest-api-for-user--role-management">REST API for user &amp; role management<a href="#rest-api-for-user--role-management" class="hash-link" aria-label="Direct link to REST API for user &amp; role management" title="Direct link to REST API for user &amp; role management">​</a></h3><p>Flask-AppBuilder supports a REST API for user CRUD,
+but this feature is in beta and is not enabled by default in Superset.
+To enable this feature, set the following in your Superset configuration:</p><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">FAB_ADD_SECURITY_API </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Once configured, the documentation for additional &quot;Security&quot; endpoints will be visible in Swagger for you to explore.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="customizing-permissions">Customizing Permissions<a href="#customizing-permissions" class="hash-link" aria-label="Direct link to Customizing Permissions" title="Direct link to Customizing Permissions">​</a></h3><p>The permissions exposed by FAB are very granular and allow for a great level of
 customization. FAB creates many permissions automatically for each model that is
 created (can_add, can_delete, can_show, can_edit, …) as well as for each view.
 On top of that, Superset can expose more granular permissions like <strong>all_datasource_access</strong>.</p><p><strong>We do not recommend altering the 3 base roles as there are a set of assumptions that
@@ -80,7 +82,14 @@
 a user session on the server side.
 The session cookie is encrypted with the application <code>SECRET_KEY</code> and cannot be read by the client.
 So it&#x27;s very important to keep the <code>SECRET_KEY</code> secret and set to a secure unique complex random value.</p><p>Flask and Flask-Login offer a number of configuration options to control session behavior.</p><ul><li>Relevant Flask settings:</li></ul><p><code>SESSION_COOKIE_HTTPONLY</code>: (default: <code>False</code>): Controls if cookies should be set with the <code>HttpOnly</code> flag.</p><p><code>SESSION_COOKIE_SECURE</code>: (default: <code>False</code>) Browsers will only send cookies with requests over
-HTTPS if the cookie is marked “secure”. The application must be served over HTTPS for this to make sense.</p><p><code>SESSION_COOKIE_SAMESITE</code>: (default: &quot;Lax&quot;) Prevents the browser from sending this cookie along with cross-site requests.</p><p><code>PERMANENT_SESSION_LIFETIME</code>: (default: &quot;31 days&quot;) The lifetime of a permanent session as a <code>datetime.timedelta</code> object.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="content-security-policy-csp">Content Security Policy (CSP)<a href="#content-security-policy-csp" class="hash-link" aria-label="Direct link to Content Security Policy (CSP)" title="Direct link to Content Security Policy (CSP)">​</a></h3><p>Superset uses the <a href="https://pypi.org/project/flask-talisman/" target="_blank" rel="noopener noreferrer">Talisman</a> extension to enable implementation of a
+HTTPS if the cookie is marked “secure”. The application must be served over HTTPS for this to make sense.</p><p><code>SESSION_COOKIE_SAMESITE</code>: (default: &quot;Lax&quot;) Prevents the browser from sending this cookie along with cross-site requests.</p><p><code>PERMANENT_SESSION_LIFETIME</code>: (default: &quot;31 days&quot;) The lifetime of a permanent session as a <code>datetime.timedelta</code> object.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="switching-to-server-side-sessions">Switching to server side sessions<a href="#switching-to-server-side-sessions" class="hash-link" aria-label="Direct link to Switching to server side sessions" title="Direct link to Switching to server side sessions">​</a></h4><p>Server side sessions offer benefits over client side sessions on security and performance.
+By enabling server side sessions, the session data is stored server side and only a session ID
+is sent to the client. When a user logs in, a session is created server side and the session ID
+is sent to the client in a cookie. The client will send the session ID with each request and the
+server will use it to retrieve the session data.
+On logout, the session is destroyed server side and the session cookie is deleted on the client side.
+This reduces the risk for replay attacks and session hijacking.</p><p>Superset uses <a href="https://flask-session.readthedocs.io/en/latest/" target="_blank" rel="noopener noreferrer">Flask-Session</a> to manage server side sessions.
+To enable this extension you have to set:</p><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">SESSION_SERVER_SIDE </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Flask-Session offers multiple backend session interfaces for Flask, here&#x27;s an example for Redis:</p><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> redis </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> Redis</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">SESSION_TYPE </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;redis&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">SESSION_REDIS </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> Redis</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">host</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&quot;redis&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> port</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">6379</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> db</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># sign the session cookie sid</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">SESSION_USE_SIGNER </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="content-security-policy-csp">Content Security Policy (CSP)<a href="#content-security-policy-csp" class="hash-link" aria-label="Direct link to Content Security Policy (CSP)" title="Direct link to Content Security Policy (CSP)">​</a></h3><p>Superset uses the <a href="https://pypi.org/project/flask-talisman/" target="_blank" rel="noopener noreferrer">Talisman</a> extension to enable implementation of a
 <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP" target="_blank" rel="noopener noreferrer">Content Security Policy (CSP)</a>, an added
 layer of security that helps to detect and mitigate certain types of attacks, including
 Cross-Site Scripting (XSS) and data injection attacks.</p><p>A CSP makes it possible for server administrators to reduce or eliminate the vectors by which XSS can
@@ -135,7 +144,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/index.html b/index.html
index 8a4c623..b90d93a 100644
--- a/index.html
+++ b/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/markdown-page/index.html b/markdown-page/index.html
index 3484f1b..c757e95 100644
--- a/markdown-page/index.html
+++ b/markdown-page/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/search/index.html b/search/index.html
index a7c7ce3..3f87fc6 100644
--- a/search/index.html
+++ b/search/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.f448a7ff.css">
-<link rel="preload" href="/assets/js/runtime~main.5a2615c1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.da047873.js" as="script">
 <link rel="preload" href="/assets/js/main.0e81f3da.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.5a2615c1.js"></script>
+<script src="/assets/js/runtime~main.da047873.js"></script>
 <script src="/assets/js/main.0e81f3da.js"></script>
 </body>
 </html>
\ No newline at end of file