Files
steampipe/pkg/db/db_common/sql_connections.go

64 lines
2.6 KiB
Go

package db_common
import (
"fmt"
"github.com/turbot/steampipe-plugin-sdk/v5/grpc/proto"
"strings"
)
func GetCommentsQueryForPlugin(connectionName string, p map[string]*proto.TableSchema) string {
var statements strings.Builder
for t, schema := range p {
table := PgEscapeName(t)
schemaName := PgEscapeName(connectionName)
if schema.Description != "" {
tableDescription := PgEscapeString(schema.Description)
statements.WriteString(fmt.Sprintf("COMMENT ON FOREIGN TABLE %s.%s is %s;\n", schemaName, table, tableDescription))
}
for _, c := range schema.Columns {
if c.Description != "" {
column := PgEscapeName(c.Name)
columnDescription := PgEscapeString(c.Description)
statements.WriteString(fmt.Sprintf("COMMENT ON COLUMN %s.%s.%s is %s;\n", schemaName, table, column, columnDescription))
}
}
}
return statements.String()
}
func GetUpdateConnectionQuery(connectionName, pluginSchemaName string) string {
// escape the name
connectionName = PgEscapeName(connectionName)
var statements strings.Builder
// Each connection has a unique schema. The schema, and all objects inside it,
// are owned by the root user.
statements.WriteString(fmt.Sprintf("drop schema if exists %s cascade;\n", connectionName))
statements.WriteString(fmt.Sprintf("create schema %s;\n", connectionName))
statements.WriteString(fmt.Sprintf("comment on schema %s is 'steampipe plugin: %s';\n", connectionName, pluginSchemaName))
// Steampipe users are allowed to use the new schema
statements.WriteString(fmt.Sprintf("grant usage on schema %s to steampipe_users;\n", connectionName))
// Permissions are limited to select only, and should be granted for all new
// objects. Steampipe users cannot create tables or modify data in the
// connection schema - they need to use the public schema for that. These
// commands alter the defaults for any objects created in the future.
// See https://www.postgresql.org/docs/12/ddl-priv.html
statements.WriteString(fmt.Sprintf("alter default privileges in schema %s grant select on tables to steampipe_users;\n", connectionName))
// If there are any objects already then grant their permissions now. (This
// should not actually do anything at this point.)
statements.WriteString(fmt.Sprintf("grant select on all tables in schema %s to steampipe_users;\n", connectionName))
// Import the foreign schema into this connection.
statements.WriteString(fmt.Sprintf("import foreign schema \"%s\" from server steampipe into %s;\n", pluginSchemaName, connectionName))
return statements.String()
}
func GetDeleteConnectionQuery(name string) string {
return fmt.Sprintf("DROP SCHEMA IF EXISTS %s CASCADE;\n", PgEscapeName(name))
}