SAS Federation Server persists
metadata for security settings in its set of system tables. The server
attempts to synchronize this metadata with the actual objects that
it represents. For example, if the administrator has granted SELECT
privilege on table T1 to User1, and subsequently table T1 is dropped,
the server will likewise drop its security metadata onto T1. If T1
is subsequently re-created, it will have no security set on the object
itself. All security definitions for T1 come from its inheritance
objects, including the schema, catalog, data service, and server.
If you prefer that the
security metadata is retained on the server, there are a couple suggested
possibilities. First, it might be that a job is dropping the table
only to re-create it in a subsequent step. This is often the case
when refreshing the contents of a table. Rather than dropping and
re-creating the table, which might also affect indexes on the table,
consider issuing a DELETE FROM TABLE
command
to delete all the rows from the table. In doing this, the underlying
table remains intact, as well as the security metadata stored in the
system tables.
A second approach is
to use definer’s rights views to assist with individual object
security. Often, data in back-end data sources is being manipulated
(created and dropped) by a few power users only. These users require
CREATE, DROP TABLE, and VIEW privileges. The CREATE privilege set
applies only to container objects (schema, catalog, data service,
and server) and not individual tables or views. The DROP privilege
can be applied at the object level. However, if designed correctly,
the DROP privilege can be used from the container object.
Business users are typically
the ones requiring table-level and column-level privileges to access
the data. If you choose the security model using definer's rights views, then you
can place your individual privileges on the views, which do not go
away when a back-end table is dropped and re-created. Back-end data can be secured
by denying privileges on the container object to business users, but granting SELECT
to view owners. An approach similar to this can be used to eliminate the need for
table-level, column-level, and row-level security on back-end data source objects.