Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Microsoft SQL Server

Автор: EugeneBoss3
Дата сообщения: 14.12.2011 08:49
BlackVetal

Цитата:
непонятно что вы обновляете - АСУ или SQL базу
Если SQL базу - возможно нет прав доступа у пользователя и поэтому нет подключения к БД.

Права доступа администратора сервера.
АСУ - это программа.
Обновляется База данных АСУ через внешние приложения-обновления (инсталляторы), которые изменяют данные в БД через SQL-скрипты.
Автор: salexn1
Дата сообщения: 14.12.2011 10:06
EugeneBoss3
какая ошибка хотя бы напишите
и какой скрипт не проходит
Автор: BlackVetal
Дата сообщения: 15.12.2011 04:55
EugeneBoss3
Есть предположение - что после обновления не хватает прав доступа к какой-нить таблице (например, таблица пользователей, набор прав пользователей) - что в свою очередь и обрубает соединение.
Автор: EugeneBoss3
Дата сообщения: 17.12.2011 23:42
BlackVetal

Цитата:
Есть предположение - что после обновления не хватает прав доступа к какой-нить таблице

Вся проблема в том, что обновление завершается ошибкой подключения к БД и следовательно до изменения таблиц не доходит.
Может проблема в строке подключения или активации БД?
Автор: BlackVetal
Дата сообщения: 19.12.2011 06:19
EugeneBoss3
Может напишите код ошибки, текст или принтскрин выложите? Подключение может обрываться и при не хватке прав доступа ... поэтому и говорю что пока предположение.
Автор: dneprcomp
Дата сообщения: 18.01.2012 20:13
SQL Server 2005 работает в Win домене. Сейчас используется server authentication.
Логин информация вводится в самописной десктоп программе.
Чтобы 'улучшить' секьюрити системы было предложенно перейти к windows authentication.
Но при этом получается, что любой юзер может использовать любой компьютер оставшийся залогиненым по тем или иным причинам. Все изменения в DB будут естественно сделаны под залогиненым юзером.
Прошу не oбсуждать, почему компьютер остается не локнутым и как это организовать.
Пробовал использовать conn.Properties("Prompt") = adPromptAlways, но это не выход. Опять же по дефолту подставляются данные логина.

1.Можно ли изменить что-нибудь в настройках или в connection string, чтобы избежать такого поведения?
2.При windows authentication system_user возвращает значение в виде [domain]\[user]
Перепробовал все встроеные функции и не нашел такую, чтобы возвращала только [user]
Верно ли, что единственый выход - использовать custom функцию?
3.Каким образом сделать mass-update stored procedures для замены "system_user" на "имя функции" при условии, что "system_user" встречается несколько раз в каждой процедуре или тригере.
Автор: naPmu3aH
Дата сообщения: 19.01.2012 13:51
dneprcomp
Как обычно попытки решить административные проблемы техническими средствами ни к чему кроме геморроя не приводят...
Автор: dneprcomp
Дата сообщения: 19.01.2012 16:07
naPmu3aH
Ну, думал я может чего упустил
Надеялся, что есть какая-нибудь хитрая connection string, позволяющая серверу использовать существующие AD аккаунты. Но при этом все-равно требовать логин/пас.
Все остальное решаемо так или иначе.
Автор: naPmu3aH
Дата сообщения: 20.01.2012 07:22
dneprcomp

Цитата:
хитрая connection string, позволяющая серверу использовать существующие AD аккаунты. Но при этом все-равно требовать логин/пас

Хитрость в строках соединения - это не к SQL Server. C точки зрения сервера все равно как
авторизуется клиент - если он авторизован ему отдадут то что он запрашивает (в соответствии с его правами).

Единственное что могу предложить - попробовать как-то прикрутить Forms Based Authentication к вашему desktop приложению. Оно конечно под Web (asp .net) заточено, но возможно что и в обычных webforms приложениях можно использовать...
Автор: dneprcomp
Дата сообщения: 20.01.2012 09:09
naPmu3aH

Цитата:
попробовать как-то прикрутить Forms Based Authentication

Все еще сложнее.
Программа написана на VB6. Т.е., никакого .NET

Цитата:
C точки зрения сервера все равно как
авторизуется клиент - если он авторизован ему отдадут то что он запрашивает (в соответствии с его правами).

Да. Но строка соединения определяет будет ли сервер запрашивать логин/пас или удовлетворится AD подтверждением. Вот и хотелось такого гибрида. Что бы сервер спрашивал имя и пас. Но и чтобы сравнивал с AD логином.
Заставить спросить я еще могу. Но там по умолчанию подставляется дата из Win логина.
Если бы хоть почистить диалог можно было перед показом юзеру...
Автор: BlackVetal
Дата сообщения: 23.01.2012 06:23
dneprcomp
Конечно извините, масло масленное делаете.
Если пользователи нелочат комп - сугубо их должна быть проблема, а не одмина или разраба. Либо оставляйте авторизацию AD, либо делайте отдельную авторизацию.
Автор: dneprcomp
Дата сообщения: 23.01.2012 07:42
BlackVetal

Цитата:
либо делайте отдельную авторизацию

Так как раз отдельная сейчас и есть.

Цитата:
Если пользователи нелочат комп - сугубо их должна быть проблема

Я же специально просил не обсуждать, как заставить юзера разлогинуться.
Это и так понятно, что юзер должен сам следить.
Интересует сама возможность сделать такой совмещеный логин на програмном уровне. Или на уровне сервера.
Хочется не лазить по настройкам логинов в 33-х местах, а разрешать/запрещать только в одном месте - в AD.
Есть желание совместить удобство управления через AD и секьюрити индивидуального логина на сервере.
Автор: spv86
Дата сообщения: 08.02.2012 06:55
Доброго времени суток!
Нужна помощь с написании запроса для MS SQL.

Есть таблица содержащая список пользователей:
USERS
SID FIO
A42B4089 Иванов
A80678B5 Петров
852A9D29 Сидоров
4DA08D7 Пупкин

А ещё есть таблица, содержащая в себе информацию о событиях:
EVENTS
ID    USER_SID TYPE TIME
2    A42B4089        102 16.3.2010 14:39:00
3    A80678B5        102 16.3.2010 14:38:00
4    852A9D29        102 16.3.2010 14:38:00
5    A80678B5        101 16.3.2010 14:30:00
6    4DA08D7        101 16.3.2010 14:28:00


А как получить список пользователей с указанием времени и типа последнего события?
Автор: bigsloth
Дата сообщения: 08.02.2012 07:10
ленивый вариант для sql server 2005 и старше

SELECT *
FROM users u
CROSS APPLY
(SELECT TOP 1 *
FROM events
WHERE user_sid = u.sid
ORDER BY time DESC) e
Автор: spv86
Дата сообщения: 10.02.2012 13:12
Извиняйте, что сразу не написал
Используется sql-сервер MSDE
Автор: A_V
Дата сообщения: 14.02.2012 11:11
spv86
MSDE = 2000й?
если еще актуально, то можно так:

select u.sid, u.fio,
(select top 1 e.type from event e where e.user_sid = u.sid order by e.time desc) [type],
(select top 1 e.time from event e where e.user_sid = u.sid order by e.time desc) [date]
from user u
Автор: spv86
Дата сообщения: 14.02.2012 12:44
Спасибо за помощь!
Работает.
Автор: karakurt2
Дата сообщения: 21.02.2012 15:29
У меня создана база по свойствам физических соединений. Она состоит из основной таблицы substance, где, собственно, и определяются свойства и двух таблиц-справочников compound_ru_ru и compound_en_us с псевдонимами соединений на русском и английском языках. Сделано это для поддержки многоязыковых приложений, где есть возможность переключить язык пользовательского интерфейса "на лету". Подскажите, какие есть средства со стороны MSSQL для поддержки многоязыковых версий одной и той же таблицы, чтобы можно было отказаться от использования суффиксов, добавляемых к имени таблицы.
Автор: mmlm10
Дата сообщения: 21.02.2012 17:42
karakurt2
Первое, что приходит в голову - ввести доп. поле с именем LANG в одну из таблиц COMPOUND, типа BIT (булево), если языков два, или типа TINYINT(короткое целое), если их будет больше.
Условно будем считать это поле булевым.
Далее, для англоязычного содержимого значение поля LANG установить в 1. Затем добавить в ту же таблицу данные из русскоязычной таблицы с установкой значения поля LANG установить в 0.

В результате в одной таблице хранятся варианты на всех языках, а выбор языка можно производить, изменяя условие LANG = 0 или 1 в выборке набора псевдонимов
Автор: naPmu3aH
Дата сообщения: 21.02.2012 19:52
Э.... А запихнуть всё в один справочник добавив поле LanguageID с ISO кодом языка, а потом в программе выбирать нужные данные (скажем с помощью хранимой процедуры) возвращая нужный псевдоним на передаваемого в процедуру CultureID (или любого другого подходящего способа получения нужного языка для приложения)?
Автор: karakurt2
Дата сообщения: 21.02.2012 22:30
да, мне нравится эта идея.
Автор: Undaster
Дата сообщения: 13.03.2012 22:22
Прошу помощи у умудрённых опытом / знаниями, есть следующий тестовый кусок в SQL 2008 R2:

[more="DDL-описание объектов"]
Код: CREATE TABLE [dbo].[tstBaseObject](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [fldStr] [varchar](50) NOT NULL,
CONSTRAINT [PK_tstBaseObject] PRIMARY KEY CLUSTERED
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


CREATE TABLE [dbo].[tstLinkObj](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [fldBaseObj] [int] NOT NULL,
    [fldInt] [int] NOT NULL,
CONSTRAINT [PK_tstLinkObj] PRIMARY KEY CLUSTERED
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


ALTER TABLE [dbo].[tstLinkObj] WITH CHECK ADD CONSTRAINT [FK_tstLinkObj_tstBaseObject] FOREIGN KEY([fldBaseObj])
REFERENCES [dbo].[tstBaseObject] ([id])
GO

ALTER TABLE [dbo].[tstLinkObj] CHECK CONSTRAINT [FK_tstLinkObj_tstBaseObject]
GO
Автор: bodomus
Дата сообщения: 16.03.2012 12:22
Добрый день всем.
Написал прототип для работы с документами MSWord из MS SQL.
Он основывается на группе функций sp_OAxxxx

Часть кода:

Declare @WordObject int, @RetCode int, @Document int , @Filename varchar(255)
Exec @RetCode = sp_OACreate 'Word.Application', @WordObject OUTPUT, 4
If @RetCode <> 0 or @@Error <> 0 Goto OLE_Error_Handler

SELECT @WordObject
Exec @RetCode = sp_OAMethod @WordObject, 'Documents.Add', @Document OUTPUT
If @RetCode <> 0 or @@Error <> 0 Goto OLE_Error_Handler

DECLARE @Method varchar(255)
SELECT @Method = 'd:\logs\12.doc'

Exec @RetCode = sp_OAMethod @WordObject, 'ActiveDocument.SaveAs' , NULL , @Method
If @RetCode <> 0 or @@Error <> 0 Goto OLE_Error_Handler

Exec @RetCode = sp_OAMethod @WordObject, 'Quit'
Exec sp_OADestroy @WordObject
Goto Done

OLE_Error_Handler:
declare @source varchar(255), @description varchar(1000)
    EXEC sp_OAGetErrorInfo @WordObject, @source output, @description output
    print @Method
    print @Filename
    print @source+' - '+@description    
    print cast(@RetCode as varchar(255))
Exec @RetCode = sp_OAMethod @WordObject, 'Quit'
Exec sp_OADestroy @WordObject
Goto Done

Done:
Exec sp_OAStop


Все работает до точки сохранения в документ
Exec @RetCode = sp_OAMethod @WordObject, 'ActiveDocument.SaveAs' , NULL , @Method

процедура возвращает ошибку : Call was rejected by callee.
Источник ошибки ODSOLE


Прошу совета - как побороть не желание объекта автоматизации сохранять в файл на диск.
Автор: mdid
Дата сообщения: 16.03.2012 13:00
bodomus
попробуйте sp_OAMethod @WordObject, 'ActiveDocument.SaveAs([путь])'
Автор: bodomus
Дата сообщения: 16.03.2012 13:46
mdid
попробуйте sp_OAMethod @WordObject, 'ActiveDocument.SaveAs([путь])

Там в пути стоит значение. - 'd:\logs\12.doc'

Система Windows 7 64. MS SQL 64 . Office 2010 32. Может это натолкнет на мысль ?
Автор: mdid
Дата сообщения: 16.03.2012 14:32
bodomus
вы пробовали? у вас путь содержится в @Method
а вы попробуйте
Exec @RetCode = sp_OAMethod @WordObject, 'ActiveDocument.SaveAs("d:\logs\12.doc") '
Автор: bodomus
Дата сообщения: 16.03.2012 14:43
mdid
Ничего не изменилось. То есть сохранения не происходит. Может какие то пермишиные надо поставить ?
Автор: mdid
Дата сообщения: 16.03.2012 14:48
1. это не проблема sql server
2. ошибка может содержаться в антивирусе..некоторае особо "продвинутые" могут блочить
3. попробуйте отключить на время антивир
4. если не то больше вариантов нет...офис на машине есть..по идее должно работать

Автор: bodomus
Дата сообщения: 16.03.2012 14:58
mdid. Эту проблему я решил на машине с Windows 7 (32) просто изменив аккаунт под которым запускался MS SQL server на аккаунт под которым я захожу ( с привилигеями администратора). Попробовал сделать то же на Windows 7 64 - не получилось. попробую отключить антивирус.
Автор: torsheran
Дата сообщения: 18.04.2012 11:44
Не подскажете каким образом сделать чтобы база в sql 2005 (не Express) автоматически копировалась раз в сутки, потом архивировалась в определённую папку и архивные копии в той папке старше 2-х недель удалялись.

Страницы: 1234567891011121314151617181920212223242526272829

Предыдущая тема: Генератор 10-ти разрядных ключей


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.