 |
 |
Archives of the TeradataForum
Message Posted: Mon, 23 Dec 2002 @ 13:52:18 GMT
| Subj: | | Re: Access Rights |
| |
| From: | | Geoffrey Rommel |
| | I have a database with several tables, views and macros. What is the most efficient way to grant the following to ALL
users: | |
| | No one should be able to access a table. | |
| | Everyone should be able to access any one of dozens of views. | |
| | Everyone should have the ability to execute any one of 7 macros. | |
The best way, Jim, would be to separate the tables (db_of_tables) from the views and macros (db_of_views). This is fairly
standard procedure in Teradata-land. You would then grant the following:
grant select
on db_of_tables
to db_of_views
with grant option;
grant select, execute
on db_of_views
to [ALL group_of_users, or a role, or PUBLIC, or individual ID's];
As Dave mentioned, if you must keep everything in the same database, you must grant the rights on every object individually.
Yuk.
Since you aren't a DBA, you probably aren't aware of why this is undesirable. The reason is that nearly every access right you
grant will insert a new row into DBC.AccessRights. If you grant, say, select and execute to a database, as in the statements above,
only one row will be inserted into the table; it will have a TableName of 'All' and a ColumnName of 'All' (or actually '00'xb, which
means 'All'). There will still be one row per user, but at least there will only be one row per database. If you have 500 users,
this will result in 500 rows. If, however, you grant access on individual objects, a row will be inserted for each object and each
user. If there are 100 objects in the database and 500 users, you will need 50,000 rows in AccessRights just for this one database.
Now, keep in mind that AccessRights has to be searched every time anyone runs a query. Probably most of these searches are one- or
two-AMP operations, but cutting down on the number of rows always
helps.
--wgr
| |