Einzelnen Beitrag anzeigen

Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Rechte verweigern nur für bestimmte Tabellen

  Alt 9. Sep 2005, 12:35
Ich hab mir jetzt so geholfen, wenns auch nicht die feine englische Art ist...
Ich habe eine Role "Buero" erstellt. Da lege ich alle Leute rein, denen ich Normalzugriff auf die Tabellen geben will. Die dürfen eigentlich alles tun, ausser Zugriff auf bestimmte Tabellen erhalten. Diese Tabellen nehme ich namentlich in die Tabelle excludetables auf. Die Tabellennamen die dort drin enthalten sind, für die sollen keine Rechte an die Role buero vergeben werden. Darin selbst steht die Tabelle excludetables und die Stored Procedure, welche die Rechte neu setzt.

SQL-Code:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[proc_Regrant]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[proc_Regrant]
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


create procedure proc_Regrant as
declare @Tablename varchar(300)
declare @xtype varchar(10)
declare @CMD varchar(300)
declare CR CURSOR for
  select name, xtype from sysobjects where type in ('U','V','P','FN') and not(name like 'dt_%and xtype='P') and not(name like 'sys%and xtype='V') and not (name in (select tablename from excludetables)) order by name

open CR
fetch next from CR into @Tablename, @xtype
while @@fetch_status = 0
begin
  /* Beginne hier, die Records zu bearbeiten */
  set @CMD = 'grant all on [' + @Tablename + '] to Buero
      execute (@CMD)
      print @Tablename + ' (' + rtrim(@xtype) + ')'
  fetch next from CR into @Tablename, @xtype
END
CLOSE CR
DEALLOCATE CR



GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
Naja, die SP macht nichts anderes, als alle sysObjects zu durchlaufen, die vom Typ U(Tabelle), P(Stored Procedure), V(View) oder FN(Funtion) sind, und welches keine System SP sind (dt_%), keine Systemviews (sys%) sind, und welche nicht in der Tabelle excludetables enthalten sind. Für die restlichen, hoffentlich nur noch Benutzerobjekte, werden alle Rechte zugeteilt.
  Mit Zitat antworten Zitat