Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
Pantalone
Member

Откуда:
Сообщений: 1322
В VB все просто, при открытии формы вызывалось окно для ввода логина и пароля и по нажатию кнопки делалась попытка создать конекшн с этим логином.
В ADP же не понятно как это сделать, при создании проекта он запросил меня под кем зайти и с тех пор всегда заходит под этой учеткой виндов.
28 окт 04, 16:21    [1069157]     Ответить | Цитировать Сообщить модератору
 Re: Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
отключить доверенное соединение из свойств проекта для начала
потом сделать свою форму для подключения или написать код который будет подключать по заложенным настройкам
28 окт 04, 16:24    [1069176]     Ответить | Цитировать Сообщить модератору
 Re: Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
Pantalone
Member

Откуда:
Сообщений: 1322
Кто-нибудь выручит с кодом? Примерчик хотя бы
28 окт 04, 16:48    [1069294]     Ответить | Цитировать Сообщить модератору
 Re: Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
1 у меня на сайте есть пример формы
2 хаммер сегодня давал пример подключалки по конфигурационному файлу
28 окт 04, 16:55    [1069337]     Ответить | Цитировать Сообщить модератору
 Re: Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
Pantalone
Member

Откуда:
Сообщений: 1322
Алексей, посмотрел твой сайт, заинтересовала такая штука как сравнения фраз с целью исключения дубликатов.
У меня есть таблица с клиентами с полями типак имя, инициалы, почт индекс, область, город, улица, дом. В этой таблице расплодилась туча двойников, например у одного г.Москва, у второго г. Москва, а у третьего просто Москва. Или допустим квартира или кв. Это случайно не для этого твоя искалка дубликатов написана?
28 окт 04, 17:27    [1069498]     Ответить | Цитировать Сообщить модератору
 Re: Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
Pantalone
Member

Откуда:
Сообщений: 1322
А насчект проги для коннекта, какая именно?
28 окт 04, 17:28    [1069504]     Ответить | Цитировать Сообщить модератору
 Re: Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
Прямая ссылка на файл:
http://www21.brinkster.com/kozin/getfile.asp?name=dbconnectionexample.rar

процедура для поиска имеющихся данных на стадии добавления данных

выдаст весь список адресов в ответ на искомую строку в порядке убывания похожести

ищем Москва Тихвинский пер. д7

выдаст типа
1 Москва Тихвинский пер. д7
2 г. Москва Тихвинский пер. д7
3 Москва Тихвинская ул. д7
итд.
28 окт 04, 17:45    [1069579]     Ответить | Цитировать Сообщить модератору
 Re: Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
Proga
Member

Откуда: МО
Сообщений: 3042
Помог АлексейК, но что-то переиначил под себя
Есть ввода пароля, там имя, пароль, 2 кнопки, "ОК" и "отмена".
На загрузку вешаем
Private Sub Form_Load()
On Error Resume Next
Dim sConnectionString

sConnectionString = "PROVIDER=SQLOLEDB.1;PASSWORD=;" & _
         "PERSIST SECURITY INFO=FALSE;USER ID=mybase_user;" & _
         "INITIAL CATALOG=mybase;DATA SOURCE=server14"
Application.CurrentProject.OpenConnection sConnectionString

If Err.Number = 30002 Or Err.Number = -2147217843 Or Err.Number = -2147467259 Then
MsgBox "Неправильное имя пользователя или пароль" & vbCrLf & Err.Description
Exit Sub
End If
Call SetRegistry(Me.PassForm_nam)
Call SetRegistry(Me.F_pass)
Call ctlstatus
'If CurrentProject.IsConnected Then DoCmd.Close acForm, Me.name
End Sub
Mybase_user имеет права только на запуск ХП, которая вытягивает пароль и имя из соотв. таблы.
Далее на кнопку "ок"
Вешаем код


Private Sub Кнопка8_Click()
On Error GoTo exit_sub
Dim a
If IsNull(Me![PassForm_nam]) = True Then
    MsgBox ("Введите имя!!!")
    Me.PassForm_nam.SetFocus
Else
    Dim cn As ADODB.Connection
    Dim sqlstr As String
    sqlstr = "driver={SQL Server};server=server14;uid=mybase_user;pwd=;database=mybase"

    Set cn = New ADODB.Connection
    cn.ConnectionString = sqlstr
    cn.Open
    Prava_yes = cn.Execute("dbo.MySP N'" & Forms!passform.PassForm_nam & "'").Fields(0)
    PS = cn.Execute("dbo.look_pass N'" & Forms!passform.PassForm_nam & "'").Fields(0)
    If PS = F_pass Then
        If Prava_yes Then
            Me.Perm = "*"
        Else
            Open_ADV_REP = Trim(Forms!passform!PassForm_nam)
        End If
     Else
        MsgBox ("Пароль неверный!!!")
        Me.F_pass = Null
        Me.F_pass.SetFocus
        a = 1
    End If
End If
cn.Close
If a = 1 Then GoTo exit_sub
Application.CurrentProject.CloseConnection

Dim sConnectionString As String
sConnectionString = "PROVIDER=SQLOLEDB.1;PASSWORD=" & PS & ";" & _
         "PERSIST SECURITY INFO=TRUE;USER ID=" & Me.PassForm_nam & ";" & _
         "INITIAL CATALOG=mybase;DATA SOURCE=server14"
Application.CurrentProject.OpenConnection sConnectionString

Call SetRegistry(Me.servername)
Call SetRegistry(Me.databasename)
Call SetRegistry(Me.PassForm_nam)
Call SetRegistry(Me.F_pass)

Dim status
If CurrentProject.IsConnected Then
status = "connected"
Else
status = ""
End If

Call SaveSetting(Left(CurrentProject.Name, Len(CurrentProject.Name) - 4), "baseconnect", "status", status)
Me.Visible = False

exit_sub:

If Err.Number = 30002 Or Err.Number = -2147217843 Or Err.Number = -2147467259 Then
MsgBox "Неправильное имя пользователя или пароль" & vbCrLf & Err.Description
End If
Exit Sub
End Sub

А вот и остальные модули взяты под копирку у Алексея (а зачем придумывать велосипед, если его кто-то уже изобрёл)

Option Compare Database
Option Explicit
Public FindStrClient As String 'Строка для поиска клиента при вызове формы поиска
Public IdClient As Integer
Public SelectedProject As String
Public Partners_fplan_detail As Integer

Declare Function IsZoomed Lib "user32" (ByVal hWnd As Long) As Long

Sub FormMaximize()
On Error Resume Next
    If Not IsZoomed(Screen.ActiveForm.hWnd) Then
        Echo False
        DoCmd.Maximize
        Echo True
    End If
End Sub

Public Sub Reload_form(FRM_NAME As String)
If CurrentProject.AllForms(FRM_NAME).IsLoaded Then DoCmd.Close acForm, FRM_NAME
DoCmd.OpenForm FRM_NAME
End Sub


Public Sub Reload_Report(REP_NAME As String, Optional View As Access.AcView = acViewPreview)
If CurrentProject.AllReports(REP_NAME).IsLoaded Then DoCmd.Close acReport, REP_NAME
DoCmd.OpenReport REP_NAME, View
End Sub


Public Sub SetRegistry(Ctl As Control)
Call SaveSetting(Left(CurrentProject.Name, Len(CurrentProject.Name) - 4), Ctl.Parent.Name, Ctl.Name, Nz(Ctl.Value, ""))
End Sub

Public Sub GetRegistry(Ctl As Control, Optional DefaultValue)
Dim v1
v1 = GetSetting(Left(CurrentProject.Name, Len(CurrentProject.Name) - 4), Ctl.Parent.Name, Ctl.Name)
If v1 = "" Then Ctl.Value = DefaultValue Else Ctl.Value = v1
End Sub

Public Function CallHelp()
On Error Resume Next
Dim oShell
Set oShell = CreateObject("WScript.Shell")
Call oShell.Run("\\kkk\help\partners.hlp", 1, False)
End Function

Public Sub ChangeHelpLocation()
Dim frm
For Each frm In CurrentProject.AllForms
DoCmd.OpenForm frm.Name, acDesign
Forms(frm.Name).HelpFile = "\\kkk\help\partners.hlp"
DoCmd.Close acForm, frm.Name, acSaveYes

'Frm.HelpFile = "\\kkk\help\partners.hlp"

Next frm
End Sub

Public Function Getsysprjcode()
Getsysprjcode = GetSetting(Left(CurrentProject.Name, Len(CurrentProject.Name) - 4), "Public", "Getsysprjcode")
End Function

Public Function SETsysprjcode(prj As String)
Call SaveSetting(Left(CurrentProject.Name, Len(CurrentProject.Name) - 4), "Public", "Getsysprjcode", prj)
End Function
Далее на Unload формы вешаем
Private Sub Form_Unload(Cancel As Integer)
Application.CurrentProject.CloseConnection
End Sub

А вот и примитивные ХП для Load-а
Create  PROCEDURE dbo.look_PASS
@Passform_nam nvarchar(100) output
as 
SET nocount on
select dbo.permissions.pass from dbo.permissions
where dbo.permissions.name=@Passform_nam

ALTER  procedure MySP (@PName as varchar(100))
AS

SET NOCOUNT ON

IF exists (SELECT ADV_REP_Admin FROM Permissions WHERE Name=@PName)
SELECT Cast(1 AS bit) AS RetCode

ELSE
SELECT Cast(0 As bit) AS RetCode

Остаётся для себя подработать напильником
28 окт 04, 17:54    [1069609]     Ответить | Цитировать Сообщить модератору
 Re: Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
Proga
Member

Откуда: МО
Сообщений: 3042
Сорри вот это Есть ввода пароля-это есть форма для ввода пароля
28 окт 04, 17:56    [1069618]     Ответить | Цитировать Сообщить модератору
 Re: Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
Pantalone
Member

Откуда:
Сообщений: 1322
А что мне мешает незная SQL пароля после открытия проекта залезть в меню Файл/Подключение и поменять там галочку на NT идентификацию? И никаких паролей ничего более не понадобится?
Это был вопрос нормер раз.

Второй вопрос, если я дал юзерам все галки на все таблицы, как сделать так чтобы в окне БД этих таблиц юзер не видел, т.е. не дать юзеру ковыряться непосредственно в таблицах из проекта?
29 окт 04, 10:51    [1070554]     Ответить | Цитировать Сообщить модератору
 Re: Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
автор
А что мне мешает незная SQL пароля после открытия проекта залезть в меню Файл/Подключение и поменять там галочку на NT идентификацию? И никаких паролей ничего более не понадобится?
Это был вопрос нормер раз.


если на сервере стоит что конкретный юзер не имеет прав к серверу или базе
то ничего страшного не случится

автор
Второй вопрос, если я дал юзерам все галки на все таблицы, как сделать так чтобы в окне БД этих таблиц юзер не видел, т.е. не дать юзеру ковыряться непосредственно в таблицах из проекта?


1 не надо давать ВСЕМ юзерам ВСЕ права на ВСЕ таблицы
надо разрешать только то что нужно. можно делать вертикальную или горизонтальную фильтрацию таблиц с помощью представлений и давать права только к ним

2 скрыть окно базы данных можно, можно даже заблокировать попытки отображения этого окна - об этом am.rusimport.ru
29 окт 04, 11:18    [1070650]     Ответить | Цитировать Сообщить модератору
 Re: Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
Pantalone
Member

Откуда:
Сообщений: 1322
Как же я права юзерам не дам на все?
В формах есть кнопочки для удаления записей, удаление по любому происходит от имени юзера, значит и права на удаления понадобятся.
Буду копать в направлении как скрыть окно базы.

автор
если на сервере стоит что конкретный юзер не имеет прав к серверу или базе
то ничего страшного не случится

Извини, но вообще ничего не понял.
29 окт 04, 11:30    [1070713]     Ответить | Цитировать Сообщить модератору
 Re: Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
имеется ввиду что:
если конкретный юзер компьютера / домена не имеет прав к MSSQL серверу или базе
29 окт 04, 11:36    [1070744]     Ответить | Цитировать Сообщить модератору
 Re: Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
Pantalone
Member

Откуда:
Сообщений: 1322
Где это можно глянуть не напомнишь?
29 окт 04, 11:44    [1070772]     Ответить | Цитировать Сообщить модератору
 Re: Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
как и все остальное связанное секьюрити сервера :

EM -> Сервер -> security -> logins
29 окт 04, 11:49    [1070787]     Ответить | Цитировать Сообщить модератору
 Re: Перевод приложения с VB клиента на ADP, как быть с SQL логинами?  [new]
Alexey Sh
Member

Откуда: SPB
Сообщений: 1930
Pantalone
А что мне мешает незная SQL пароля после открытия проекта залезть в меню Файл/Подключение и поменять там галочку на NT идентификацию? И никаких паролей ничего более не понадобится?
Это был вопрос нормер раз.

Второй вопрос, если я дал юзерам все галки на все таблицы, как сделать так чтобы в окне БД этих таблиц юзер не видел, т.е. не дать юзеру ковыряться непосредственно в таблицах из проекта?


Никто не мешает вашему юзеру открыть таблички другой программой.
защита от прямого обращения к таблицам серьёзно осложняет логику приложения (как клиентской, так и серверной части). Сначала определитесь, стоит ли овчинка выделки.
29 окт 04, 11:49    [1070788]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить