Heute Vormittag hatte ich einen Beratungstermin, in dem geklärt werden sollte, wie man Tabellenobjekt(e) in Management Studio verbergen kann. Es ging primär darum, dass Metadaten nicht einfach angezeigt/ausgelesen werden sollten. Die von mir gezeigte Variante schützt nicht vor dem Ausspähen von Daten und/oder der Evaluierung von Metadaten!

Warum sollte man Objekte einer Datenbank verbergen?

Häufig kommt es vor, dass man seine Ideen vor neugierigen Augen schützen möchte. Seien es Stored Procedures, Funktionen oder auch die Strukturen der Tabellen. Ein Problem dabei ist, dass zwar die Daten dieser Objekte durch geeignete Berechtigungen geschützt werden können. Dieser Schutz ist jedoch nicht zwingend auf Strukturen (Metadaten) anwendbar. Deutlich schwieriger – sogar unmöglich – wird es, wenn der angemeldete Benutzer sysadmin des Servers oder dbo in der Benutzerdatenbank ist. In diesem Fall hat man prinzipiell keine Möglichkeiten, seine Arbeit zu schützen. Man kann aber zumindest – auf den ersten Blick – den unmittelbaren Zugang zu den Objekten einschränken, indem man sie „versteckt“. Damit ist natürlich kein Schutz im herkömmlichen Sinn vorhanden, denn sowohl ein sysadmin als auch ein dbo können jederzeit die Objekte wieder sichtbar machen. Aber wenn man nicht mit der Programmiersprache von Microsoft SQL Server vertraut ist, wird es schon etwas komplizierter gemacht.

CREATE DATABASE [demo_db];
GO

USE [demo_db];
GO

CREATE TABLE [dbo].[orders]
(
    [o_orderdate] [DATE] NULL,
    [o_orderkey] [BIGINT] NOT NULL,
    [o_custkey] [BIGINT] NOT NULL,
    [o_orderpriority] [CHAR](15) NULL,
    [o_shippriority] [INT] NULL,
    [o_clerk] [CHAR](15) NULL,
    [o_orderstatus] [CHAR](1) NULL,
    [o_totalprice] [MONEY] NULL,
    [o_comment] [VARCHAR](79) NULL
);
GO

Nachdem die Tabelle [dbo].[orders] in der Testdatenbank angelegt wurde, ist sie – wie alle Objekte – im SQL Server Management Studio sichtbar.

Tabellenobjekt in Management Studio sichtbar.
Tabelle [dbo].[orders] ist in SSMS sichtbar

Dadurch, dass das Objekt in der grafischen Oberfläche sichtbar ist, kann der angemeldete Benutzer die Objektstrukturen analysieren und kann sogar ein gültiges T-SQL-Skript für das markierte Objekt erstellen lassen. Leider gibt es keine ausreichenden Sicherheitsmechanismen, die eine hoch privilegierten Benutzer einschränken. JEDER angemeldete Benutzer kann das Objekt sehen jedoch nur auf Grund seiner individuellen Berechtigungen manipulieren.

Das SQL Server Management Studio besitzt keine Möglichkeiten, Objekte über die GUI auszublenden. Um die Objekte in einer Datenbank zu verbergen, muss T-SQL-Code bemüht werden.

Tabellenobjekte einer Datenbank ausblenden

EXEC sp_addextendedproperty
     @name = N'microsoft_database_tools_support',
     @value = 'hide',
     @level0type = N'Schema',
     @level0name = 'dbo',
     @level1type = N'Table',
     @level1name = 'orders';
GO
Tabellenobjekt nicht mehr in Management Studio sichtbar.
Die Tabelle wird im SQL Server Managementstudio verborgen

Es ist wichtig, zu verstehen, dass es sich bei diesem „Schutz“ nur um ein Placebo handelt. Nur, weil ein angemeldeter Benutzer ein Objekt nicht im SQL Server Management Studio sieht, bedeutet es nicht, dass er nicht die Möglichkeit hat, die Metadaten des verborgenen Objekts abzurufen!

SELECT * FROM sys.tables
WHERE	is_ms_shipped = 0;
GO

Mit der obigen Beispielabfrage lassen sich alle benutzerdefinierten Tabellen in der Datenbank anzeigen. Wer sich ein wenig mit T-SQL auskennt, kann durch T-SQL-Abfragen die Metadaten der verborgenen Objekte sichtbar machen!

Tabellenobjekte einer Datenbank einblenden

Um ein Objekt in einer Datenbank wieder sichtbar zu machen, muss die Eigenschaft von dem Objekt wieder entfernt werden. Dazu verwendet man den folgenden Befehl

EXEC sp_dropextendedproperty
    @name = N'microsoft_database_tools_support',
    @level0type = N'Schema',
    @level0name = 'dbo',
    @level1type = N'Table',
    @level1name = 'orders';
GO

Fazit

Bei dem hier gezeigten Tipp handelt es sich NICHT um eine Schutzmaßnahme. Erfahrene sysadmin / Entwickler werden den Braten relativ schnell riechen und mit den geeigneten Mitteln an die Metadaten kommen. Dennoch bietet es einen minimalen Schutz, um die Objekte vor den unerfahrenen Benutzern zu verbergen.

Links