Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Есть ли возможность создать пользователя только для скрипта?

Задали вопрос, возможно ли создать пользователя только для скрипта. Да я понимаю что можно привязать к IP но проблема в том что программеры тоже имеют доступ к данному IP. Есть ли какие-то другие возможность?

Заранее спасибо за ответ даже отрицательный.
Ответ: А при чём тут файловая система? я имел в виду реализацию в формате хранимой процедуры и руление правами в самом MySQL.
Вопрос: Запрос на получения списка баз данных созданных пользователем

Здравствуйте! Подскажите пожалуйста как можно получить список баз данных созданных пользователем?
Запрос типа:
Oracle 11 SQL
1
SELECT dataDaseName FROM .... WHERE USER ....
Ответ: Благодарю за ответ. Все работает. Спасибо.
Вопрос: readonly-пользователь +хранимые процедуры

Всем привет, есть MSSQL 2014 Express. Хочу создать пользователя, которому недоступно ничего, кроме выполнения тех хранимых процедур, которые я укажу вручную.
Для этого создаю роль базы данных с владельцем dbo, со схемами db_deny_datareader и db_deny_datawriter. Создаю пользователя с данной ролью - у него все объекты закрыты, однако системные хранимые процедуры (sys.sp_addarticle и куча других) открыты и доступны для изменения. Вопрос- от него скрыть эти процедуры или в крайнем случае запретить изменение ? Спасибо
Ответ: Всем спасибо за участие
Вопрос: mssql и поддержка татарского языка

На Windows Server 2012 установлен MSSQL Server 2008 Express. Создана база с collation Cyrillic_General_CI_AS. В Management studio добавляю текст в таблицу (тип nvarchar(MAX)) на татарском языке, потом там же делаю select и вместо татарских символов - знаки вопроса. При этом испанские или, например, французские нелатинские буквы выводятся нормально. В чем может быть проблема?
Ответ: вот в контексте НЕКИРИЛЛИЧЕСКОЙ базы
я заношу кириллицу в юникодный столбец COL_UNI.
и в таблицу ложатся вопросики.
в то же время я в варчар (COL_ASCII) кладу кириллицу в контексте той же базы,
но передаю ЮНИКОДОМ.
и кириллица на месте

К сообщению приложен файл. Размер - 49Kb
Вопрос: Создание нового пользователя БД

При создании нового пользователя БД под именем test выдаёт ошибку: test не является допустимым именем WindowsNT. Подскажите, как правильно создать пользователя (вход без пароля)?

К сообщению приложен файл. Размер - 98Kb
Ответ:
Mind
laferro,

Потому что вы пытаетесь создать пользователя с "Проверка подлинности Windows". А у вас существует такой пользователь в домене?
Используйте "Проверка подлинности SQL Server".


Получилось ) Спасибо.
Вопрос: Гетерогенный сервис с MSSQL

Уважаемые коллеги прошу помощи!

Настраиваю тут вторую неделю (уже как) гетерогенный сервис к БД MSSQL... Были разные косяки и проблемы, но в основном все победил. Тестировал настроенный unixODBC через tsql и isql, connect проходит успешно, удаленная БД отдает данные. Далее настраиваю гетерогенный сервис, листнер, tnsnames. проверяю tnsping. Вроде бы все хорошо (хотя пингует сам себя). Создаю DB Link, успешно. А вот далее начинаются непонятные грабли. А именно при попытке сформировать SQL запрос в удаленную БД получаю такую ошибку:

ORA-28500: соединение ORACLE с посторонней системой выдало сообщение:
[unixODBC][FreeTDS][SQL Server]Cannot open server "MSSQL" requested by the login. The login failed. {42000,NativeErr = 40532}[unixODBC][FreeTDS][SQL Server]Unable to connect to data source {08001}
ORA-02063: предшествующий 2 lines из DBL
28500. 00000 - "connection from ORACLE to a non-Oracle system returned this message:"
*Cause: The cause is explained in the forwarded message.
*Action: See the non-Oracle system's documentation of the forwarded
message.
Error at Line: 1 Column: 23

Пароль проверял, все корректно, единственное в пароле есть символ "*" и поэтому весь пароль приходится брать в кавычки при создании DB Link...

P.S. DB Link создается с любым паролем, пробовал, проверка видимо происходит на уровне запроса.
Ответ: Вот заметки на полях для других
-----------------------

Доступ к гетерогенным БД осуществляется через ODBC. Чтобы добавить сервис для создания DBLink на какой-либо БД Oracle
требуется создать сначала источник данных(DSN) на сервере.

Пример конфигурирования DSN для MSSQL сервера.

Чтобы добавить DSN - заходим на хост с правами root(по ssh). На хосте уже установлены и сконфигурированы
UnixODBC и FreeTDS(для MSSQL). Переходим в каталог /usr/local/etc и правим файл freetds.conf,
добавляем описание сервера MSSQL (ip, port ). Выглядит это так:

[mssqlserver] <--- алиас сервера для DSN
host = <ip или dns имя>
port = 1433
tds version = 8.0
client charset = UTF-8


Установленные драйвера для БД можно посмотреть в /etc/odbcinst.ini , а DSN описываются в /etc/odbc.ini.
Чтобы добавить DSN для MSSQL следующего вида:

[sccm] <----- DSN - должно быть уникальным, проверить в /etc/odbc.ini
Driver=FreeTDS <--- имя драйвера, см /etc/odbcinst.ini
Description=mssql
TDS_Version = 8.0
Trace=No
ServerName=mssqlserver <---алиас сервера, см freetds.conf
Port=1433
Database= <DB>
UID= логин в БД
PWD= пароль


DSN добавлен - можно проверить работоспособность:

$> isql -v sccm логин пароль


Подключились, проверили выборку из какой-нибудь таблицы - все DSN настроен и проверен.
Переходим к созданию гетерогенного сервиса.

Создание сервиса

У нас есть рабочий DSN, теперь можем создать сервис, который смогут использовать другие сервера БД Oracle.
Сервис добавляется в listener.ora, который транслирует вызовы в HS. Логинимся пользователем oracle,
добавляем сервис(например SCCM):


SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=sccm) <--- имя сервиса, регистровозависимое, регистр тот же, что и в $ORACLE_HOME/hs/admin/init<сервис>.ora
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)
(PROGRAM=dg4odbc) <--- используем ODBC гетерогенный доступ
(ENVS=LD_LIBRARY_PATH=/usr/local/lib:/usr/lib64:/u01/app/oracle/product/11.2.0/xe)
)
(SID_DESC=
(SID_NAME=fp)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)
(PROGRAM=dg4odbc)
(ENVS=LD_LIBRARY_PATH=/usr/local/lib:/usr/lib64:/u01/app/oracle/product/11.2.0/xe)
)
)


Перезапускаем листенер и проверяем, что сервис запущен и слушает входящие соединения

$ lsnrctl reload

$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 24-APR-2015 11:14:34

Copyright (c) 1991, 2011, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.2.0 - Production
Start Date 17-APR-2015 15:07:38
Uptime 6 days 20 hr. 6 min. 55 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Default Service XE
Listener Parameter File /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/serverdb/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=serverdb)(PORT=1521)))
Services Summary...
Service "fp" has 1 instance(s).
Instance "fp", status UNKNOWN, has 1 handler(s) for this service...
Service "sccm" has 1 instance(s).
Instance "sccm", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

$

Создаем сам гетерогенный сервис(под пользователем oracle)

$ cd $ORACLE_HOME/hs/admin

Создаем файл init<имясервиса>.ora ( в нашем примере initsccm.ora - регистр sccm тот же, что в listener.ora) со
следующим содержимым:

#
# HS init parameters
#
HS_FDS_CONNECT_INFO = sccm <--- имя сервиса
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
HS_FDS_SQLLEN_INTERPRETATION=64
HS_FDS_TRACE_LEVEL = off

HS_NLS_NCHAR=UCS2 <--- кодировка для MS SQL, чтобы у клиентов правильно отображалась кириллица
HS_LANGUAGE = AMERICAN_AMERICA.CL8MSWIN1251

set ODBCINI=/etc/odbc.ini


Теперь можно локально проверить, работает ли гетерогенный сервис. Логинимся пользователем oracle.
Добавляем в локальный $ORACLE_HOME/network/admin/tnsnames.ora сервис SCCM:

SCCM =
(DESCRIPTION =
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL = TCP)(HOST = serverdb)(PORT = 1521))
)
(CONNECT_DATA =
(SID = SCCM)
)
(HS = OK)
)

Проверяем доступность:

$ tnsping SCCM

TNS Ping Utility for Linux: Version 11.2.0.2.0 - Production on 24-APR-2015 11:30:14

Copyright (c) 1997, 2011, Oracle. All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = serverdb)(PORT = 1521))) (CONNECT_DATA = (SID = SCCM)) (HS = OK))
OK (100 msec)

Создаем тестовый DBLink и проверяем работоспособность

$ sqlplus / as sysdba

$SQL> create database link TST connect to <логин ODBC> identified by <пароль ODBC> using 'SCCM';

$SQL> select count(*) from sysusers@TST;

$SQL> drop database link TST;

-------
Ну вот как-то так
Вопрос: (MSSQL + XmlTextReader) вешает файлы

Есть тривиальная CLR-функция,
create function [dbo].[ReadXml]
	( @path nvarchar(max)
	) returns xml
as external NAME [MyAssembly].[MyType].[MyMethod]
go


Реализация MyMethod предельно простая:
[return: SqlFacet(MaxSize = -1)]
[SqlFunction(Name = "MyMethod", DataAccess = DataAccessKind.None, SystemDataAccess = SystemDataAccessKind.None)]
static public SqlXml MyMethod([SqlFacet(MaxSize = -1)] SqlString path)
{
	if (path.IsNull)
		return SqlXml.Null;
	var stream = File.Open(path.Value, FileMode.Open, FileAccess.Read, FileShare.Read);
	var reader= XmlTextReader(stream);
	if (reader== null)
		return SqlXml.Null;
	return new SqlXml(reader);
}


Работает шустро, и не дорого.
Но есть нюанс: эта скалярка активно используется для чтения xml-файлов, в цикле, по списку известных путей. Головняк начинается после чтения файлов, уже ЗА пределами MSSQL. Если файлов прочитано было много, то последние файлы остаются "подвешенными", т.о. удалить их не представляется возможным. Этот эффект имеет плавающий характер, количество подвешенных файлов меняется между запусками цикла. В связи с этим вопрос: с чего бы это сиквел держит файлы открытыми? как убедить его, что неплохо было бы диспозить ридер и стрим под ним??? На данный момент отпустить стрим удается только в результате отключения службы сиквела, но сами понимаете, сервак при этом мгновенно остывает, и пользователи съедят меня, и религия не позволяет... Я мог бы читать стрим ридером самостоятельно, диспозить все явным образом и затем возвращать строку с xml-содержимым, но это странное решение, которое поубивает профит от XmlReader'а. + это не мой код, и формально это верный код, трогать который не хотелось бы. Что посоветуете?
ps:
Microsoft SQL Server 2014 - 12.0.2269.0 (X64) 
	Jun 10 2015 03:35:45 
	Copyright (c) Microsoft Corporation
	Express Edition (64-bit) on Windows NT 6.3 <X64> (Build 10586: )
Ответ:
Сон Веры Павловны
RubinDm
не понятно, зачем SqlXml прям сразу засасывает в себя все содержимое XmlReader'а целиком? Строго говоря, не факт, что прочитанное содержимое будет востребовано в полном объеме. Если переменная типа XML будет использована для поиска одной ноды по заданным условиям (что вполне вероятно), то в реализации SqlXml разумно было бы использовать XPathNavigator, который работает что называется "за еду"
И что дальше? Ленивое подтягивание данных прямо во время выполнения запроса/ХП? Я сомневаюсь, что такое вообще возможно.
Именно ленивое. Это вполне возможно, и даже полезно в части расхода ram в случае, если содержимое не будет востребовано в полном объеме, например через XPathNavigator. Про исходники - да, сам уже заглянул. В конечном счете все сводится, помимо прочего, например к необходимости быть готовым ответить за запрос значения SqlXml.Value более одного раза. В исходниках видно, что в случае использования ридера по факту создается копия содержимого, хранение которой организовано в виде MemoryStream. Если вместо ридера мы сразу даем стрим, и если он CanSeek, то сиквел видимо считает, что и такой стрим ему сгодится. Правда он его оборачивает wrapper'ом, цель которого явным образом задокументирована в исходниках: when xmlreader calls close, do not close the orginial stream. И получается, что оригинальный стрим закроется только с подачи GC. Я в принципе не против.. ) пусть так.. но при таком раскладе, возможно, стоило бы на SqlXml натянуть реализацию IDisposable. Не так уж дорого это стоило бы, и ресурсы освобождались бы куда более вменяемо и предсказуемо.

Вобщем, академический интерес удовлетворен, считаю тему закрытой.
Вопрос: Доступ учетки MSSQL к файлам

Разбирался тут с доступом к файлам для оператора BULK INSERT. Столкнулся с непонятной вещью. Возможно, этот вопрос для ветки Windows, но все ж таки спрошу здесь.

Ситуация такая. Создал папку, в нее поместил текстовый файл. Выполняю
truncate table social;

bulk insert social from 'f:\temp\111.txt'
with(codepage='acp');
Все работает. Теперь отзываю права доступа к папке и файлу 111.txt у всех кроме себя самого (допустим, учетка SHOME\senya). Опять выполняется без ошибок, хотя экземпляр MSSQL работает по втроенной учеткой NETWORK SERVICE.
Дальше интереснее. Создаю логин SHOME\lena на основе непривилегированной Windows-учетки, включаю ее в роль sysadmin. Войдя под этим именем загрузку осуществить не получается, выдается закономерная ошибка
Msg 4861, Level 16, State 1, Line 3
Массовая загрузка невозможна, так как файл "f:\temp\111.txt" не удалось открыть. Код ошибки операционной системы 5(Отказано в доступе.).
Далее даю разрешение на доступ к папке и файлу для SHOME\lena. И после этого массовая загрузка проходит нормально. Это что же получается, сервер получает доступ от имени подключившегося логина? По всем признакам да, но как-то это непонятно лично мне. Может кто-нибудь объяснить?
Ответ:
M-stlyle
DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)
SELECT @XML = CONVERT(XML, BulkColumn) FROM OPENROWSET(BULK '\\server\folder\file1.xml', SINGLE_BLOB) AS x;


если запускаю этот скрипт локально на сервере где стоит SQL - то работает.
Под тем же пользователем запускаю скрипт удаленно, с другого компьютера - "Код ошибки операционной системы 5(Отказано в доступе.)"
Пробовал в процедуру вставить - тоже самое.

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


Косяк не с правами - косяк в голове.

1. Нибось Trusted Connection?
2. Первое, что необходимо осознать: даже если MS SQL верит что "это Вася" - операционная система не обязана этому верить.
3. При попытке доступа к файловой системе ОСь запрашивает авторизацию, т.е. имя и ПАРОЛЬ.
4. Ваш ПАРОЛЬ серверу неизвестен.
5. Отсюда - облом.
6. Под учетными данными службы MS SQL теперь принципиально НИКУДА не лезет.
7. Так получается, что вы не Все - вы НИКТО.

ЗЫ. Учи delegation.
Вопрос: MSSQL 2016 или экзотика

Добрый день! Очень хочу услышать ваше мнение.

Есть OLTP на mssql 2016. Нужно сделать хранилище. объем несколько десятков ТБ с возможностью роста (перспектива)

Есть 2 варианта: 1. сделать на mssql columstore или на экзотике. (Вертика, кликхаус, Impala)

mssql
Плюсы
есть железо и админы и стабильность
Минусы: боссы хотят:
чтобы было современно =колоночную (mssql columstore)
чтобы было надолго. т.е. вариант сделать на mssql, а если не взлетит потом переходить на другое не хотят.

Вопрос с финансами сильно не стоит, т.е . готовы платить
Ответ:
кириллk
Закзачик ретейлер
Значит хотят, продажи детальные, стоки по дням. вообщем классика. (рядом клиенты )

Не понял, а откуда клиенты у ритейлера? У них программа лояльности? Или это дистрибьютор?

Получится у вас побить на DWH и ADWH:

DWH будет хранить исторический данные из POS, на нем будет чековая аналитика, корзины и прогнозирование (результаты которого для удобства анализа также можно кидать в ADWH.
и ADWH будет для клиентской аналитики и ad-hoc запросов/отчетов.

Вести столько чеков в одной системе для чековой аналитики, анализа корзин и прогнозирования - бессмысленно для ритейлера с 30% движениям по SKU Y2Y, если там во весь рост не внедрен категорийный менеджмент. Т.е. данные анализы идут по потребительским свойствам товара, а не по SKU. А 1кг сахарного песка от ООО "Танечка" и ООО "Манечка" - это как раз разные SKU.

В общем, идите от бизнес-требований.

С Уважением,
Георгий.
Вопрос: Можно ли скриптами MSSQL взаимодействовать с iis?

Добрый день.

Понятия не имею можно ли это как то настроить, попробую описать суть... Есть API стороннего сервиса, данное API организовано таким образом, что часть запросов вызывается на нашей стороне, а другая часть API отправка запросов на наш адрес.

Отправить запрос на сторонний ресурс можно через бизнес логику mssql, вызвать в хранимой процедуре библиотеку clr... тут и вовсе не нужен iis... Но, т.к. нужно и получать запросы из вне, то я полагаю библиотеки clr будет мало...

Не хочется "плодить" технологии сторонних производителей, идеально "связать" бы mssql с iis без всяких лишних прослоек, таких как php модули и прочее... внешний запрос попадая на iis отправляется в БД mssql вызывая "зарегистрированную" хранимую процедуру. А полученный запрос в формате json "распакуем" уже средствами mssql т.к используем mssql2016

Такое возможно?
Ответ: Игорь_UUS,

если что-то идет и в вашу сторону, то публикуйте веб-приложение на вашем IIS, поднимайте веб-сервисы. Сервисы будут вызывать заданные процедуры на сиквеле. Т.е. со стороны SQL выполняете CLR функции, которые работают с внешними веб-сервисами, а у себя создаёте свои сервисы, которые выполняют процедуры. CLR можно завернуть в SQL процедуры, дабы вести журналирование запросов.
Не забудьте определить уровни доступа веб-сервисов, dbo не давайте.