TYPO3 Tabellen im Database Analyzer ignorieren

Geschäftsmann schreibt E-Mail an die IT-Abteilung.

Viele TYPO3-Projekte brauchen mehr als nur die hauseigenen Tabellen. Immer wieder müssen unabhängige Tabellen in der gleichen Datenbank angelegt und verwaltet werden. Meist wegen technischer Einschränkungen beim Hosting oder als pure Vereinfachung. Problematisch wird es, wenn der Database Analyzer genutzt wird, um die TYPO3-Installation gepflegt zu halten.

Hier kann es im Team oder in delegierten Aufgaben passieren, dass eine Tabelle zu viel gelöscht wird, nur weil diese eigentlich nichts mit TYPO3 zu tun hat. Nicht jede Tabelle liegt in der Verantwortung des CMS, muss aber trotzdem ggf. von diesem lesbar sein. Wenn eine Konfiguration über die TCA also nicht bei TYPO3 liegt, muss ein anderer Ansatz geschaffen werden.

Ab der Version 8 verwendet TYPO3 Doctrine für die Datenbank-Zugriffe und dort gibt es eigentlich nur zwei Wege überhaupt eine Tabelle aus der Sichtbarkeit zu nehmen:

Eine Version wäre es über GRANT und REVOKE umständlich eine Rechte-Matrix anzulegen die diese Tabelle unsichtbar macht für TYPO3.

Eine elegantere Lösung ist eine einfache Extension sein, die einen Schema-Filter über Doctrine erzeugt.

Erzeugen wir unsere einfache Extension in typo3/ext/schemafilter/ext_emconf.php.

<?php
$EM_CONF[$_EXTKEY] = [
		'title' => 'Doctrine Schema-Filter',
		'description' => 'Versteckt Tabellen vor dem Database-Analyzer',
		'category' => 'plugin',
		'version' => '1.0.0',
		'state' => 'beta',
		'constraints' => [
				'depends' => [
						'typo3' => '8.7.0-10.9.99',
				],
		],
];

In der typo3/ext/schemafilter/ext_localconf.php konfigurieren wir den Filter entsprechend:

<?php

use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;

$tabellen = implode('|', [
    'api_log',
    'csp_log',
    'reporting'
]);

GeneralUtility::makeInstance(ConnectionPool::class)
    ->getConnectionByName(ConnectionPool::DEFAULT_CONNECTION_NAME)
    ->getConfiguration()
    ->setFilterSchemaAssetsExpression('/^(?!('.$tabellen.')\_).*$/');

Nach der Aktivierung des Plugins verschwinden in $tabellen hinterlegten Tabellen dauerhaft aus der Sichtbarkeit.

Bitte beachtet das diese nur auf die Default-Connection von Doctrine angewandt wird. Diese Vorlage sollte euch aber eine Idee geben wie ihr diese Tabellen komplett aus dem Analyzer herausnehmen könnt, ohne umständlich eine TCA pflegen zu müssen.

mit den Stichwörtern

Weitere Themen