Hm... You are right, it seems that syslog-ng tries to connect to the
database that is the default for the specified user in config. However,
I've checked it in syslog-ng source, and syslog-ng uses the same code
for all database types for connecting and passes the name of database
properly and in case of other databases it works, too.
So, it is a bug, but not in syslog-ng but in freetds or libdbi. Report
a bug on it, please, and we will check if we can fix it.
Thanks
On 2010-12-13 23:04, Shawn Cannon wrote:
The only thing that I did not have selected for the sql
user was to default it to the database I wanted to use. It defaulted
to Master. I changed that and now all is well. Kinda strange to have
an option called database() if it does not use that.
On Mon, Dec 13, 2010 at 4:29 PM, Zoltán
Pallagi <pzolee@balabit.hu> wrote:
Well, syslog-ng tries to
query the result of "select * from tablename where 0=1;" to check if
the specified table exists. If it didn't return with error, then the
table exists, and syslog-ng will check the columns and alter the table
if needed.
In other cases (the above query returned with any error), syslog-ng
assumes that the specified table does not exist and tries to create it.
As far as I see, this query returned with error in your case, that's
the reason why syslog-ng tries to create it after reaching the next
time_reopen. Also, it seems that syslog-ng has not enough permission to
create this table. Are you sure that the user specified in syslog-ng
conf has the sufficient permissions for this database?
You have just told me that you tried it with tsql, could you show me
the output of this?
Have you used the same user? I mean you should execute tsql with the
following parameters:
tsql -S rawsql -p 1785 -U user_in_conf -P password_in_conf
2010.12.13. 20:23 keltezéssel, Shawn Cannon írta:
OK this is some good info. It looks like
even though I specify the database name, it is someone how using it and
tries to create or check for the tables on the master database. Any
ideas? Here is the info from the capture. Why is is running a SELECT
looking for syslogng instead of the database name?
....(....SELECT * FROM syslogng WHERE
0=1...K.<...7.........Invalid object name
'syslogng'..RAWSQL\MARTY....................CREATE TABLE syslogng
(datetime varchar(16), host varchar(32), program varchar(32), pid
varchar(8), message varchar(4096))...`.<...L.......4.CREATE TABLE
permission denied in database 'master'..RAWSQL\MARTY............
Here is my destination section from my syslogng config:
On Mon, Dec 13, 2010 at 12:19:03PM -0500, Shawn Cannon
wrote:
> I meant I ran tsql. :-)
>
> Shawn Cannon
>
> IT Professional
>
> > OK I installed it ans ran TDS using
sql.hidden.local and the port number
> > and I was able to create the table. I changed my syslogng
config file to
> > this same setting, yet it still gives me an error. I left
the table in the
> > database that was created but even that did not help. Any
ideas?
There have been some bugs in the past where syslog-ng was not always
connecting to the database correctly on the proper ports, etc. However
in your case this could only apply if something was also listening on
the default port I would assume, since it seemed like it had connected.
Although as one of the other posters had pointed out there could be an
inaccurate error message as well. Perhaps you could verify it's
connecting properly to the DB using Wireshark?
Was the tsql / sqsh / etc. based testing performed using the same
machine as the syslog-ng setup is running?