{"version":3,"sources":["webpack:///./src/pages/docs/Connecting to Databases/extra-settings.mdx"],"names":["_frontmatter","layoutProps","MDXLayout","DefaultLayout","MDXContent","components","props","mdxType","isMDXComponent"],"mappings":"wPAMaA,G,UAAe,S,2OAE5B,IAKMC,EAAc,CAClBD,gBAEIE,EAAYC,IACH,SAASC,EAAT,GAGZ,IAFDC,EAEC,EAFDA,WACGC,EACF,8BACD,OAAO,YAACJ,EAAD,eAAeD,EAAiBK,EAAhC,CAAuCD,WAAYA,EAAYE,QAAQ,cAC5E,iBAAQ,CACN,GAAM,2BADR,2BAGA,iBAAQ,CACN,GAAM,iCADR,iCAGA,wIAEE,qBAAY,CACV,WAAc,KADhB,iBAFF,2BAME,qBAAY,CACV,WAAc,KADhB,SANF,0BAUA,oFACE,yBAAgB,CACd,WAAc,KADhB,iBADF,mCAME,yBAAgB,CACd,WAAc,KADhB,4BANF,oBAUE,yBAAgB,CACd,WAAc,KADhB,mBAVF,2BAeE,yBAAgB,CACd,WAAc,KADhB,uBAfF,6DAmBA,iBAAQ,CACN,GAAM,WADR,WAGA,qEACE,qBAAY,CACV,WAAc,KADhB,UADF,yCAME,qBAAY,CACV,WAAc,KADhB,YANF,mEAUE,qBAAY,CACV,WAAc,KADhB,UAVF,sBAeE,qBAAY,CACV,WAAc,KADhB,eAfF,2CAmBA,iBAAQ,CACN,GAAM,sDADR,sDAGA,2OAGA,uFACE,yBAAgB,CACd,WAAc,KADhB,mBADF,wEAME,yBAAgB,CACd,WAAc,KADhB,oCANF,oDAWA,uBAAK,mBAAU,CACX,UAAa,kBACb,WAAc,OAFb,kLASL,qGAEE,yBAAgB,CACd,WAAc,KADhB,oCAFF,uCAMA,uBAAK,mBAAU,CACX,UAAa,kBACb,WAAc,OAFb,4OAUL,iBAAQ,CACN,GAAM,2BADR,2BAGA,wCACE,yBAAgB,CACd,WAAc,KADhB,SADF,iBAKE,qBAAY,CACV,WAAc,KADhB,kBALF,2BASA,uBAAK,mBAAU,CACX,UAAa,gBACb,WAAc,OAFb,wM,yOAiBTH,EAAWI,gBAAiB","file":"component---src-pages-docs-connecting-to-databases-extra-settings-mdx-f510fc4bd86417462658.js","sourcesContent":["import * as React from 'react'\n  /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsx mdx */\n\nimport DefaultLayout from \"/Users/srinify/Documents/incubator-superset/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\n\nconst makeShortcode = name => function MDXDefaultShortcode(props) {\n  console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n  return <div {...props} />;\n};\n\nconst layoutProps = {\n  _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n  components,\n  ...props\n}) {\n  return <MDXLayout {...layoutProps} {...props} components={components} mdxType=\"MDXLayout\">\n    <h2 {...{\n      \"id\": \"extra-database-settings\"\n    }}>{`Extra Database Settings`}</h2>\n    <h3 {...{\n      \"id\": \"deeper-sqlalchemy-integration\"\n    }}>{`Deeper SQLAlchemy Integration`}</h3>\n    <p>{`It is possible to tweak the database connection information using the parameters exposed by\nSQLAlchemy. In the `}\n      <strong {...{\n        \"parentName\": \"p\"\n      }}>{`Database edit`}</strong>\n      {` view, you can edit the `}\n      <strong {...{\n        \"parentName\": \"p\"\n      }}>{`Extra`}</strong>\n      {` field as a JSON blob.`}</p>\n    <p>{`This JSON string contains extra configuration elements. The `}\n      <inlineCode {...{\n        \"parentName\": \"p\"\n      }}>{`engine_params`}</inlineCode>\n      {` object gets unpacked\ninto the `}\n      <inlineCode {...{\n        \"parentName\": \"p\"\n      }}>{`sqlalchemy.create_engine`}</inlineCode>\n      {` call, while the `}\n      <inlineCode {...{\n        \"parentName\": \"p\"\n      }}>{`metadata_params`}</inlineCode>\n      {` get unpacked into the\n`}\n      <inlineCode {...{\n        \"parentName\": \"p\"\n      }}>{`sqlalchemy.MetaData`}</inlineCode>\n      {` call. Refer to the SQLAlchemy docs for more information.`}</p>\n    <h3 {...{\n      \"id\": \"schemas\"\n    }}>{`Schemas`}</h3>\n    <p>{`Databases like Postgres and Redshift use the `}\n      <strong {...{\n        \"parentName\": \"p\"\n      }}>{`schema`}</strong>\n      {` as the logical entity on top of the\n`}\n      <strong {...{\n        \"parentName\": \"p\"\n      }}>{`database`}</strong>\n      {`. For Superset to connect to a specific schema, you can set the `}\n      <strong {...{\n        \"parentName\": \"p\"\n      }}>{`schema`}</strong>\n      {` parameter in\nthe `}\n      <strong {...{\n        \"parentName\": \"p\"\n      }}>{`Edit Tables`}</strong>\n      {` form (Sources > Tables > Edit record).`}</p>\n    <h3 {...{\n      \"id\": \"external-password-store-for-sqlalchemy-connections\"\n    }}>{`External Password Store for SQLAlchemy Connections`}</h3>\n    <p>{`Superset can be configured to use an external store for database passwords. This is useful if you a\nrunning a custom secret distribution framework and do not wish to store secrets in Superset’s meta\ndatabase.`}</p>\n    <p>{`Example: Write a function that takes a single argument of type `}\n      <inlineCode {...{\n        \"parentName\": \"p\"\n      }}>{`sqla.engine.url`}</inlineCode>\n      {` and returns the\npassword for the given connection string. Then set `}\n      <inlineCode {...{\n        \"parentName\": \"p\"\n      }}>{`SQLALCHEMY_CUSTOM_PASSWORD_STORE`}</inlineCode>\n      {` in your config\nfile to point to that function.`}</p>\n    <pre><code {...{\n        \"className\": \"language-python\",\n        \"parentName\": \"pre\"\n      }}>{`def example_lookup_password(url):\n    secret = <<get password from external framework>>\n    return 'secret'\n\nSQLALCHEMY_CUSTOM_PASSWORD_STORE = example_lookup_password\n`}</code></pre>\n    <p>{`A common pattern is to use environment variables to make secrets available.\n`}\n      <inlineCode {...{\n        \"parentName\": \"p\"\n      }}>{`SQLALCHEMY_CUSTOM_PASSWORD_STORE`}</inlineCode>\n      {` can also be used for that purpose.`}</p>\n    <pre><code {...{\n        \"className\": \"language-python\",\n        \"parentName\": \"pre\"\n      }}>{`def example_password_as_env_var(url):\n# assuming the uri looks like\n# mysql://localhost?superset_user:{SUPERSET_PASSWORD}\nreturn url.password.format(os.environ)\n\nSQLALCHEMY_CUSTOM_PASSWORD_STORE = example_password_as_env_var\n`}</code></pre>\n    <h3 {...{\n      \"id\": \"ssl-access-to-databases\"\n    }}>{`SSL Access to Databases`}</h3>\n    <p>{`You can use the `}\n      <inlineCode {...{\n        \"parentName\": \"p\"\n      }}>{`Extra`}</inlineCode>\n      {` field in the `}\n      <strong {...{\n        \"parentName\": \"p\"\n      }}>{`Edit Databases`}</strong>\n      {` form to configure SSL:`}</p>\n    <pre><code {...{\n        \"className\": \"language-JSON\",\n        \"parentName\": \"pre\"\n      }}>{`{\n    \"metadata_params\": {},\n    \"engine_params\": {\n          \"connect_args\":{\n              \"sslmode\":\"require\",\n              \"sslrootcert\": \"/path/to/my/pem\"\n        }\n     }\n}\n`}</code></pre>\n\n  </MDXLayout>;\n}\n;\nMDXContent.isMDXComponent = true;\n      "],"sourceRoot":""}