|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
В Books Online вычитала, что : "When a mail stored procedure is executed, SQL Mail looks for the defined mail profile in the domain account that triggered it." Значит ли это, что если я залогинируюсь с account отличным от того, с которым стартует SQL Server и для которого в Windows Messaging настроен профиль для подключения к POP3/SMTP серверу, а для моего account такой профиль не настроен, то SQL Mail не сможет выполнить xp_sendmail, так как не найдет соответствующего профиля, если я буду пытаться выполнить xp_sendmail не сделав logoff? У меня получается очень похоже на такую фигню. А может грабли где-то в другом месте? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2001, 18:49 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
Конечно нет! Вы подаете SQL Server-у команду и все внешние функции, как то работа с почтовым профилем, доступ к различным папкам на дискеи сетевым дискам и т.п. SQL Server выполняет с теми правами, которые даны учетной записи под которой он работает. Так что использовать тот аккаунт под которым работает SQL Server совсем не обязательно. К тому же, ведь можно еще использовать собственную аутентификацию SQL Server-а Опишете проблему подробнее. Может у вас просто не хватает прав на выполнение процедуры xp_sendmail? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2001, 19:27 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
Ситуация такая: В таблице в тригере OnInsert вызывается xp_sendmail. При добавлении на клиенте новой записи в таблицу не срабатывает xp_sendmail, если в это время на сервере залогинировался пользователь с аккаунтом, для которого не настроен почтовый профиль. После возникновения такой ситуации, даже если выполнить логин с аккаунтом SQL Server, то ничего не меняется. Приходится останавливать процесс mapisp32.exe и перезапускать SQL Mail. Когда я настроила для своего аккаунта такой же почтовый профиль как у SQl Server, то независимо от того залогиниролась ли я на сервере или нет, xp_sendmail срабатывает. Вот я и подумала, что SQL Server использует почтовый профиль аккаунта, для которого в текущий момент открыта рабочая сессия. Может это быть правдой? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 11:30 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
Странно все это... Но все же он использует "свой" профиль а не профиль подключенного юзера. А какую он ошибку то пишет при попытке триггером выполнить xp_sendmail? Или же никакую не пишет и просто виснет? К описанной ситуации не относится, но все же: триггер выполняется с правами логина выполняющего добавление. А этот логин может не иметь прав на xp_sendmail, так что если требуется, чтобы письма отправлялись при добавлении данных любым пользователем, надо всем логинам, которые могут выполнить добавление дать права на xp_sendmail. Ну или более безкомпромисно - guest-у ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 13:31 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
Триггер выполняется с правами логина, его откомпилирвавшего ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 14:25 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
Я никому специально не давала права на выполнение процедуры xp_sendmail. А триггер срабатывает... 2 Dmitry: Ошибки он никакой не пишет, просто процесс добавления записи повисает в lock, а таблица похоже блокируется, так как все попытки посмотреть ее содержимое заканчиваются сообщением что-то вроде "timeout expired". И после этого никакие другие e-mail оповещения не приходят. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 15:55 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
2 SergSuper: Да, виноват, пожалуй это я сгоряча... Но с другой стороны делаем создаем 2 базы test и test1, создаем пользователя testuser c правами только на базу test и делаем : use test create table mytab (a int) go use test1 go create procedure myproc as select * from test..mytab go use test go create trigger mytrig on mytab for insert as exec test1..myproc go grant insert on mytab to testuser Теперь логинимся testuserom и делаем use test insert into a values(5) Оно говорит "Server user 'testuser' is not a valid user in database 'test1'" Как это объяснить? Хотя если сделать его пользователем test1, но не давать прав на выполнение myproc, то работает, хотя сам по себе он ее запустить не может... Или запихните в триггер ту же xp_sendmail и выполните добавление в нее этим же бесправным Testuser-ом. Получим "EXECUTE permission denied on object 'xp_sendmail', database 'master', owner 'dbo'." Похоже я все таки чего то не понимаю 2 Иринка: Так Вы, наверное, имеете админские права, поэтому и выполнилась xp_sendmail. А другие юзеры таких прав иметь не будут и у них не сработает... Насчет собсно основной проблемы даже не знаю что сказать ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 19:41 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
2 Dmitry Оно говорит "Server user 'testuser' is not a valid user in database 'test1'" Как это объяснить? -------- Так же он будет ругаться и без триггера - прав на таблицу нету. Хотя если сделать его пользователем test1, но не давать прав на выполнение myproc, то работает, хотя сам по себе он ее запустить не может... -------- Т.е. права на вставку в таблицу появились, а на запуск процедуры - нет. Или запихните в триггер ту же xp_sendmail и выполните добавление в нее этим же бесправным Testuser-ом. Получим "EXECUTE permission denied on object 'xp_sendmail', database 'master', owner 'dbo'." ------- Очевидно нет прав на выполнение 'xp_sendmail' у логина, скомпилировавшего триггер. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2001, 09:49 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
Так же он будет ругаться и без триггера - прав на таблицу нету. ----------------------------------- В том то и дело что права на таблицу есть (см. последнюю строчку примера). Прав нет на базу где лежит процедура, вызываемая из триггера. Т.е. права на вставку в таблицу появились, а на запуск процедуры - нет ------------------------------------ Права на вставку и так были. Появились только права на подключение к базе где лежит процедура вызываемая из триггера. Очевидно нет прав на выполнение 'xp_sendmail' у логина, скомпилировавшего триггер. ------------------------------------- Не-а. Компилировал от имени администратора SQL-я. И если потом им же и добавляю значение в таблицу на которой висит триггер, то все нормально проходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2001, 12:31 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
2 Dmitry "Server user 'testuser' is not a valid user in database 'test1'" "В том то и дело что права на таблицу есть " Какие он может иметь права на таблицу, если он даже не юзер базы? В остальном - наверное Вы что-то невнимательно делали. А вообще я администрированием особо не занимался, кое-чего могу и не знать, так что спорить больше не буду. С приветом Сергей ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2001, 13:00 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
Контекст безопасности запуска xp_sendmail, в данном случае, будет зависеть от того, принадлежит ли пользователь к роли sysadmin. Если да, то контекст будет той учётной записи NT, от имени которой стартует SQLServerAgent, если нет, то запуск произойдёт в контексте созданной при инсталляции SQL сервера учётной записи SQLAgentCmdExec. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2001, 15:13 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
Вот теперь я запуталась окончательно Если сделать, как предложил Dmitry, и в базе test в триггере вызывать xp_sendmail, то точно не дает выполнить юзеру testuser, так как нет полномочий. Но при этом в моей рабочей базе на том же самом сервере, если создать такую же самую таблицу mytab, то xp_sendmail в триггере на добавление записи в нее срабатывает не зависимо от того, какой юзер добавляет запись, даже тот же самый testuser, если ему дать права на добавления записи. Что за ерунда????? Может надо менять какие-то параметры БД? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2001, 16:51 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
по-моему зациклились еще раз: права на выполнение процедур внутри триггера (как и внутри обычных процедур) определяются правами логина, который откомпилировал триггер. Если любой юзер имеет права на изменение таблицы, то при соответствующем изменении вызовется соответствующий триггер. При этом могут быть вызваны процедуры, которые этому юзеру недоступны - и это нормально(а вдруг он захочет их вызвать не из триггера?). Так что, Иринка, у Вас всё работает так, как и должно быть. Внутри триггера Вы можете проверять что это за юзер и соответственно программно менять логику работы триггера (не слишком умно написал?) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2001, 17:14 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
"Если сделать, как предложил Dmitry, и в базе test в триггере вызывать xp_sendmail, то точно не дает выполнить юзеру testuser, так как нет полномочий. " Нет полномочий на xp_sendmail или всё-таки на изменение таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2001, 17:35 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
В том то и дело, что полномочия на вставку записи есть, а выскакивает "EXECUTE permission denied on object 'xp_sendmail', database 'master', owner 'dbo'." Если вызов xp_sendmail убрать, то все работает. Вот и спрашивается: почему в одной базе это работает, а в другой - нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2001, 18:43 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
2 SergSuper: "Какие он может иметь права на таблицу, если он даже не юзер базы?" SergSuper, при всем моем уважении в Вам (это действительно так), должен отметить, что Вы во второй раз в этой теме невнимательно читаете мои реплики. Я ж в примере написал, что есть две базы - Test и Test1. Testuser является юзером базы test и имеет права на добавление в таблицу mytab, которая находится в этой базе. В триггере вызывается процедура, находящаяся в другой базе (test1). На базу test1 testuser прав не имеет. При этих условиях и получаем ошибку. Вывод: когда в триггере вызыватся процедура из ДРУГОЙ базы, происходят "паранормальные" явления. Во всяком случае мне они таковыми представляются, поскольку я их объяснить не могу. При этом триггер выполняется не с правами юзера, откомпилировавшего триггер (т.к. он имеет админские права, да и при добавлении записи им же триггер срабатывает нормально), но и не с правами запускающего (поскольку стоит сделать его юзером test1, но не давать прав на процедуру, вызываемую из триггера и все проходит на ура). Еще раз оговорюсь, такая фишка возникает только при вызове процедуры из другой базы, когда затрагиваются объекты из той же базы, то триггер выполняется с правами юзера, его откомпилировавшего, тут я с Вами полностью согласен и еще раз извиняюсь за первоначальную ошибку. --------------------------------------- "Нет полномочий на xp_sendmail или всё-таки на изменение таблицы?" Опять же в примере написано: "EXECUTE permission denied on object 'xp_sendmail', database 'master', owner 'dbo'" ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2001, 02:39 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
Кстати, чего то мы действительно привязались к триггерам. При использовании SP все то же самое... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2001, 02:49 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
2 Dmitry: Интересная вещь обнаружилась. Когда я создаю на сервере новую базу данных test, то сразу после создания в списке юзеров есть только dbo причем с пустым Login Name. Если после создания БД выполнить use Test exec sp_changedbowner 'sa', а затем со своим логином создать триггер запускающий xp_sendmail, то никаких проблем с полномочиями на выполнение xp_sendmail не возникает ни когда запись добавляет testuser, ни когда логин администратора. Что бы это значило??? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2001, 13:43 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
Рискуя потерять посление остатки своего авторитета, кину мысль: а может триггер выполняется всё-таки с правами владельца таблицы? Похоже на это? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2001, 15:46 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
SergSuper! Авторитет Ваш конечно непоКоБеЛим Но вникните, пожалуйста, в ситуацию: 1) Подключаюсь к серверу как администратор 2)создаю БД 3)в этой БД создаю таблицу и триггер, вызывающий xp_sendmail при добавлении к таблице записи 4)добавляю запись в таблицу -> срабатывает триггер, отсылается почта 5)создаю юзера testuser и даю ему право на добавление записи в эту самую таблицу 6) подсоединяюсь к серверу как testuser и добавляю запись в таблицу -> триггер не срабатывает, так как нет прав на исполнение xp_sendmail. Если триггер выполняется с правами владельца таблицы, то почему сам владелец может выполнить триггер, а testuser нет???? А вот если поменять владельца всей базы данных на 'sa', то все работает независимо от юзера. Может я конечно совсем тупая, но я не понимаю почему так присходит ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2001, 17:04 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
>А вот если поменять владельца всей базы данных на 'sa', то все работает независимо от юзера. Я думаю собака порылась именно здесь sa не имеет никаких ограничений в правах, а вот роль администратора (кстати какого именно?) может иметь, попробуйте повторить 1, 2, 3, перед пунктом 4 внимательно посмотрите права логина администратора, там есть тонкости смыл которых я в общем то не понял (не надо мне это было ) так вот, попробуйте явно указать права на запуск процедуры Вашему логину администратора. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2001, 17:21 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
Так, на всякий случай... Иринка, а ты случайно не используешь динамический SQL в триггере? Если вызов процедуры xp_sendmail формируется в DSQL, то обращение к этой хранимой процедуре произойдет не с правами создавшего триггер, а с правами текущего пользователя. В подобных случаях необходимо давать право на запуск непосредственно xp_sendmail каждому юзеру, кто может попытаться произвести добавление в таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2001, 19:10 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
2 Иринка: Иринка, что-то я не понял как это dbo с пустым loginname? Так вроде не бывает. Loginname - тот кто базу создал. Насчет очередной обнаруженной Вами фичи - да, еще одно чудо ! Причем если использовать первую часть моего примера, т.е. где никакого отношения к xp_sendmail нет, а есть просто процедура из другой базули, то это не помогает. В принципе это можно объяснить тем что юзером master является guest, но тогда все же приходится признать что сделать sa dbo - не панацея. 2 Всем: похоже All обленился - создается впечатление, что большинство из тех кто дает советы поленились воссоздать ситуацию и пытаются найти решение вслепую. Это конечно высший пилотаж, но вот только не получается... Интересно, а сами микрософтовцы смогли бы как-то разумно обосновать такое поведение SQL-я? Может это просто баг? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2001, 00:51 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
2 Dmitry: Честно говоря, я сама не понимаю, почему, когда я создаю новую базу данных в списке юзеров появляется dbo с пустым Login Name. Мой domain account относится к группе администраторов NT сервера, где находится SQL Server, т.е. по идее ему соответствует стандартный login BUILTIN\Administrators. Отдельно для своего domain account я не создавала login на SQL сервере. А насчет вызова процедуры из другой базы, может так было задумано? 2 Garya: В триггере всего одна строка EXEC master..xp_sendmail @recipients='XXX@yyy.zz', @subject = 'New record', @message = 'New record was added to table' 2 Genady: Проверила права на выполнение xp_sendmail своего логина. Есть такие. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2001, 11:21 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
У меня постоянно dbo без конкретного login-а просто я захожу в QA под SA и запускаю скрипт на создание базы. 2 Иринка А обязательно создавать базу администратором? Или Вы просто теперь уже разобраться хотите? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2001, 11:37 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
>В триггере всего одна строка >EXEC master..xp_sendmail @recipients='XXX@yyy.zz',.... EXEC будет выполняться не в Вашем контексте, а в контексте SQLAgentCmdExec, если только Вы не включены в роль sysadmin, тогда в контексте учётной записи, от имени которй стартует SQLServerAgent. Иринка, может ли Ваш SQLAgentCmdExec работать с почтовым профилем? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2001, 14:20 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
2 Александр: Если xp_sendmail исполняется в контексте SQLAgentCmdExec, то эта процедура в триггере должна выполняться независимо от того, кто активировал этот триггер. Но это оказывается не так, если выполнить пример, предложенный Dmitry (см. переписку выше) 2 Genady: Получается, чтобы xp_sendmail в триггере срабатывал независимо от пользователя, активировавшего триггер, необходимо, чтобы dbo обязятельно был SA. Вот это и не понятно! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2001, 14:57 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
Мыслим логически. 1. dbo нельзя удалить. 2. По умолчанию в dbo отображается sa. 3. sa удалить можно. 4. При создании новой БД в dbo отображена пустота. Вывод -> sa удален! Я угадал? Может, нужно просто отобразить какую-либо учетную запись в dbo? Вдруг поможет . ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2001, 19:25 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
"У меня постоянно dbo без конкретного login-а просто я захожу в QA под SA и запускаю скрипт на создание базы." Странно... Я попробовал - логиннаме - sa. И ваще под кем бы не заходил пустым не бывает ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2001, 21:29 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
Так, насчет пустого логина допер Он пустой когда создатель БД коннектился к серверу через членство в группе NT. sa тут ни при чем, во всяком случае у меня под sa dbo сопоставлен ему (sa). 2 Garya: "По умолчанию в dbo отображается sa" По умолчанию (т.е. если не было sp_changedbowner) отображается тот кто создал базу, если только тот кто ее создал не вошел через членство в группе NT (хе, пригодилось). --------------------------- "sa удалить можно" Интересно, как? --------------------------- отображение ЛЮБОЙ уч. записи не поможет. У меня в Dbo всегда был кто-то сопоставлен, но все симтомы были те же ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2001, 00:52 |
|
Вопрос про SQL Mail
|
|||
---|---|---|---|
#18+
"sa system administrator). Эта учетная запись оставлена для сохранения обратной совместимости с предыдущими версиями SQL Server. Ранее учетная запись была обязательной, имела абсолютные права по управлению сервером и не могла быть удалена. В SQL Server 2000 можно более гибко управлять правами учетных записей, используя роли сервера. В принципе, учетная запись sa может быть удалена. Программа установки включает ее в роль сервера sysadmin, предоставляя ей тем самым аболютные права управления SQL Server 200, и устанавливает для нее пустой пароль. Поэтому первое, что необходимо сделать по завершении инсталляции - это сменить пароль sa. Для повышения безопасности системы следует ограничить использование учетной записи sa, оставив ее на крайний случай. Для управления сервером лучше создать новые учетные записи и предоставить им ограниченный набор прав." Е.Мамаев. "SQL Server 2000 Наиболее полное руководство". Стр.221. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2001, 14:49 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1827080]: |
0ms |
get settings: |
9ms |
get forum list: |
41ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 188ms |
0 / 0 |