04.07.2011, 21:02 UTC+2

Sie sind nicht angemeldet.

NagTrap - verschiedene Datenbanken

tobi468

Anfänger

Beiträge: 12

Geburtstag: 07.02.1988 (23)

Geschlecht: Männlich

Wohnort: Passau

Beruf: Systemadministrator

Anzahl Nagios-Server: 1

Nagios-Version(en): 3.2.3

Verteiltes Monitoring: Nein

Redundantes Monitoring: Nein

Anzahl-Hosts: 13

Anzahl Services: 30

Betriebssystem(e): Debian Squeeze

Plugin-Version(en): -

NDO-Version: 1

1

18.04.2011, 11:00

NagTrap - verschiedene Datenbanken

Hi,

Wir stehen vor dem Problem das wir Traps von verschiedenen Kunden bekommen. Der Kunde selbst soll per NagTrap Zugriff auf seine Traps bekommen. Es muss jedoch unter allen Umständen verhindert werden das Kunde A auf Daten von Kunde B zugreifen kann. Hat jemand eine Idee wie es sich realisieren lässt, dass die Traps bestimmten Tabellen / Datenbank zugeteilt werden können? Ich habs mit einem Trigger versucht - ist allerdings mein erster und funktionieren tut er auch noch nicht wirklich :D.

hier der Trigger Code:

MySQL-Abfrage(n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DELIMITER $$
DROP TRIGGER /*!50033 IF EXISTS */ `trap_verteilung`$$
CREATE TRIGGER trap_verteilung BEFORE INSERT on snmptt.snmptt
FOR EACH ROW
BEGIN
IF new.community = 'public' then
insert into snmp.test
SET id = new.id,
eventname = new.eventname,
eventid = new.eventid,
trapoid = new.trapoid,
enterprise = new.enterprise,
community = new.community,
hostname = new.hostname,
agentip = new.agentip,
category = new.category,
severity = new.severity,
uptime = new.uptime,
traptime = new.traptime,
formatline = new.formatline,
trapread = new.trapread;
ENDIF;
DELIMITER ;



evtl. kennt ja jemand noch eine andere Lösung?

Vielen dank schon mal vorab

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »tobi468« (03.05.2011, 17:15)


tobi468

Anfänger

Beiträge: 12

Geburtstag: 07.02.1988 (23)

Geschlecht: Männlich

Wohnort: Passau

Beruf: Systemadministrator

Anzahl Nagios-Server: 1

Nagios-Version(en): 3.2.3

Verteiltes Monitoring: Nein

Redundantes Monitoring: Nein

Anzahl-Hosts: 13

Anzahl Services: 30

Betriebssystem(e): Debian Squeeze

Plugin-Version(en): -

NDO-Version: 1

2

03.05.2011, 17:15

danke an:

https://nagios-portal.org/wbb/index.p…anten#post89488

und wer lesen kann ist klar im Vorteil :S

bleibt noch ein Problem mit Geräten auf denen man die Community nicht ändern kann :\

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi468« (03.05.2011, 17:46)


pitchfork

Super Moderator

Beiträge: 14 749

Wohnort: Kassel

Beruf: Sysadmin SAP / Linux / AIX

Anzahl Nagios-Server: 2

Hobbys: Motorrad fahren, wenns die Zeit erlaubt :-)

Nagios-Version(en): 3.2.1

Icinga-Version(en): ---

Verteiltes Monitoring: Nein

Redundantes Monitoring: Nein

Anzahl-Hosts: 310

Anzahl Services: 4500

Betriebssystem(e): Debian 5.0 Lenny

Plugin-Version(en): 1.4.x

NagVis-Version: 1.4.1

NDO-Version: ---

IDO-Version: ---

Perfparse-Version: ---

Sonstige Addon's: SNMPTT, NagTrap, NagVis 1.4.5, check_mk, PNP-0.6.x. Thruk

3

03.05.2011, 18:37

Pro Kunde eine eigene IP mit eigenem snmptrapd, eigenem snmptt und somit eigener Datenbank

Nur so als Idee ...
PNP Developer.
PNP 0.6.13 ist online !
Fragen zu PNP mit Angabe der verwendeten PNP Version werden bevorzugt beantwortet.
OMD - Open Monitoring Distribution

tobi468

Anfänger

Beiträge: 12

Geburtstag: 07.02.1988 (23)

Geschlecht: Männlich

Wohnort: Passau

Beruf: Systemadministrator

Anzahl Nagios-Server: 1

Nagios-Version(en): 3.2.3

Verteiltes Monitoring: Nein

Redundantes Monitoring: Nein

Anzahl-Hosts: 13

Anzahl Services: 30

Betriebssystem(e): Debian Squeeze

Plugin-Version(en): -

NDO-Version: 1

4

12.05.2011, 16:29

danke für deinen Tipp. Mir ist gerade aufgefallen das die oben gepostete Lösung zwar auf der "Startseite" funktioniert, ich aber beim setzen eines Filters folgenden MySQL Error bekomme:


Quellcode

1
Error: You have an error in your SQL syntax; check the manual that  corresponds to your MySQL server version for the right syntax to use  near 'WHERE `community` = CONVERT( _utf8 'maxmuster' USING latin1 )  ORDER BY id DES' at line 1


Ich hab schon versucht folgende Zeile etwas anzupassen (ohne convert und mit ' '):

Quellcode

1
$query = "SELECT * FROM ".$table['name']." ".$dbQuery." WHERE `community` = CONVERT( _utf8 '$auth_user' USING latin1 ) ORDER BY id ".$sort." LIMIT ".$limit;


Leider bisher ohne Erfolg :(

tobi468

Anfänger

Beiträge: 12

Geburtstag: 07.02.1988 (23)

Geschlecht: Männlich

Wohnort: Passau

Beruf: Systemadministrator

Anzahl Nagios-Server: 1

Nagios-Version(en): 3.2.3

Verteiltes Monitoring: Nein

Redundantes Monitoring: Nein

Anzahl-Hosts: 13

Anzahl Services: 30

Betriebssystem(e): Debian Squeeze

Plugin-Version(en): -

NDO-Version: 1

5

23.05.2011, 11:29

Ich hab es mittlerweile etwas anders gehandhabt. Eine zweite Tabelle enthält eine UID und eine Community. Dadurch muss die Community nicht gleich dem Loginnamen sein. Hier der Code falls jemand das gleiche Problem haben sollte:

MySQL-Abfrage(n)

1
2
3
4
5
CREATE TABLE IF NOT EXISTS `users` (
  `uid` varchar(30) NOT NULL,
  `community` varchar(30) NOT NULL,
  UNIQUE KEY `uid` (`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# # - -     Mandantenfaehig     - - # #

$auth_user=$_SERVER['PHP_AUTH_USER'];
    $status $_GET["severity"];
    if (empty($status) xor $status == "OK")
    { 
    if($auth_user == "omdadmin") {
            $query "SELECT * FROM ".$table['name']." ".$dbQuery." ORDER BY id ".$sort." LIMIT ".$limit;
            $result = @mysql_query($query);
            } else {
            $query "select * from ".$table['name']." where community=(SELECT community FROM users WHERE users.uid = '$auth_user' limit 1) order by id $sort limit $limit ";
            $result = @mysql_query("$query");
            }


}
else
{
if($auth_user == "omdadmin") {
            $query "SELECT * FROM ".$table['name']." ".$dbQuery." ORDER BY id ".$sort." LIMIT ".$limit;
            $result = @mysql_query($query);
            } else {
            $query "select * from ".$table['name']." where community=(SELECT community FROM users WHERE users.uid = '$auth_user' limit 1) and severity='$status' order by id $sort limit $limit ";
            $result = @mysql_query("$query");
            }
}

# # - -             ENDE        - - # #


Ich bin in PHP nicht sonderlich erfahren aber vllt. hilft es ja jemanden weiter. Danke noch mal an mazen für die Idee.

Grüße

Tobi

Ähnliche Themen